From c4932c659a2f77cf77b7c72494209a0b36a1d14d Mon Sep 17 00:00:00 2001 From: ItzCrazyKns Date: Wed, 31 Jul 2024 20:17:57 +0530 Subject: [PATCH 001/115] feat(app): lint --- src/agents/webSearchAgent.ts | 47 +++++++++++++++++++++--------------- src/app.ts | 8 +++--- src/lib/linkDocument.ts | 16 ++++++------ 3 files changed, 41 insertions(+), 30 deletions(-) diff --git a/src/agents/webSearchAgent.ts b/src/agents/webSearchAgent.ts index 8d0ffb1..c93dabb 100644 --- a/src/agents/webSearchAgent.ts +++ b/src/agents/webSearchAgent.ts @@ -157,35 +157,43 @@ const createBasicWebSearchRetrieverChain = (llm: BaseChatModel) => { question = 'Summarize'; } - let docs = [] + let docs = []; const linkDocs = await getDocumentsFromLinks({ links }); const docGroups: Document[] = []; linkDocs.map((doc) => { - const URLDocExists = docGroups.find((d) => d.metadata.url === doc.metadata.url && d.metadata.totalDocs < 10); + const URLDocExists = docGroups.find( + (d) => + d.metadata.url === doc.metadata.url && d.metadata.totalDocs < 10, + ); if (!URLDocExists) { docGroups.push({ ...doc, metadata: { ...doc.metadata, - totalDocs: 1 - } + totalDocs: 1, + }, }); } - const docIndex = docGroups.findIndex((d) => d.metadata.url === doc.metadata.url && d.metadata.totalDocs < 10); + const docIndex = docGroups.findIndex( + (d) => + d.metadata.url === doc.metadata.url && d.metadata.totalDocs < 10, + ); if (docIndex !== -1) { - docGroups[docIndex].pageContent = docGroups[docIndex].pageContent + `\n\n` + doc.pageContent; + docGroups[docIndex].pageContent = + docGroups[docIndex].pageContent + `\n\n` + doc.pageContent; docGroups[docIndex].metadata.totalDocs += 1; } - }) + }); - await Promise.all(docGroups.map(async (doc) => { - const res = await llm.invoke(` + await Promise.all( + docGroups.map(async (doc) => { + const res = await llm.invoke(` You are a text summarizer. You need to summarize the text provided inside the \`text\` XML block. You need to summarize the text into 1 or 2 sentences capturing the main idea of the text. You need to make sure that you don't miss any point while summarizing the text. @@ -204,16 +212,17 @@ const createBasicWebSearchRetrieverChain = (llm: BaseChatModel) => { Make sure to answer the query in the summary. `); - const document = new Document({ - pageContent: res.content as string, - metadata: { - title: doc.metadata.title, - url: doc.metadata.url, - }, - }) - - docs.push(document) - })) + const document = new Document({ + pageContent: res.content as string, + metadata: { + title: doc.metadata.title, + url: doc.metadata.url, + }, + }); + + docs.push(document); + }), + ); return { query: question, docs: docs }; } else { diff --git a/src/app.ts b/src/app.ts index 9c80baa..96b3a0c 100644 --- a/src/app.ts +++ b/src/app.ts @@ -30,9 +30,9 @@ server.listen(port, () => { startWebSocketServer(server); process.on('uncaughtException', (err, origin) => { - logger.error(`Uncaught Exception at ${origin}: ${err}`) -}) + logger.error(`Uncaught Exception at ${origin}: ${err}`); +}); process.on('unhandledRejection', (reason, promise) => { - logger.error(`Unhandled Rejection at: ${promise}, reason: ${reason}`) -}) \ No newline at end of file + logger.error(`Unhandled Rejection at: ${promise}, reason: ${reason}`); +}); diff --git a/src/lib/linkDocument.ts b/src/lib/linkDocument.ts index 1bbac62..9607220 100644 --- a/src/lib/linkDocument.ts +++ b/src/lib/linkDocument.ts @@ -1,8 +1,8 @@ import axios from 'axios'; -import { htmlToText } from 'html-to-text' +import { htmlToText } from 'html-to-text'; import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; import { Document } from '@langchain/core/documents'; -import pdfParse from 'pdf-parse' +import pdfParse from 'pdf-parse'; export const getDocumentsFromLinks = async ({ links }: { links: string[] }) => { const splitter = new RecursiveCharacterTextSplitter(); @@ -23,14 +23,14 @@ export const getDocumentsFromLinks = async ({ links }: { links: string[] }) => { const isPdf = res.headers['content-type'] === 'application/pdf'; if (isPdf) { - const pdfText = await pdfParse(res.data) + const pdfText = await pdfParse(res.data); const parsedText = pdfText.text .replace(/(\r\n|\n|\r)/gm, ' ') .replace(/\s+/g, ' ') .trim(); const splittedText = await splitter.splitText(parsedText); - const title = 'PDF Document' + const title = 'PDF Document'; const linkDocs = splittedText.map((text) => { return new Document({ @@ -52,16 +52,18 @@ export const getDocumentsFromLinks = async ({ links }: { links: string[] }) => { selector: 'a', options: { ignoreHref: true, - } + }, }, - ] + ], }) .replace(/(\r\n|\n|\r)/gm, ' ') .replace(/\s+/g, ' ') .trim(); const splittedText = await splitter.splitText(parsedText); - const title = res.data.toString('utf8').match(/(.*?)<\/title>/)?.[1]; + const title = res.data + .toString('utf8') + .match(/<title>(.*?)<\/title>/)?.[1]; const linkDocs = splittedText.map((text) => { return new Document({ From 9c1936ec2cb0a18389c6037895c30aab416243b9 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Sun, 4 Aug 2024 18:14:46 +0530 Subject: [PATCH 002/115] feat(chat-window): lint & beautify --- ui/components/ChatWindow.tsx | 85 ++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 48 deletions(-) diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index ea9a93d..5e6d382 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -38,53 +38,54 @@ const useSocket = ( 'embeddingModelProvider', ); + const providers = await fetch( + `${process.env.NEXT_PUBLIC_API_URL}/models`, + { + headers: { + 'Content-Type': 'application/json', + }, + }, + ).then(async (res) => await res.json()); + if ( !chatModel || !chatModelProvider || !embeddingModel || !embeddingModelProvider ) { - const providers = await fetch( - `${process.env.NEXT_PUBLIC_API_URL}/models`, - { - headers: { - 'Content-Type': 'application/json', - }, - }, - ).then(async (res) => await res.json()); + if (!chatModel || !chatModelProvider) { + const chatModelProviders = providers.chatModelProviders; - const chatModelProviders = providers.chatModelProviders; + chatModelProvider = Object.keys(chatModelProviders)[0]; - chatModelProvider = Object.keys(chatModelProviders)[0]; - - if (chatModelProvider === 'custom_openai') { - toast.error( - 'Seems like you are using the custom OpenAI provider, please open the settings and configure the API key and base URL', - ); - setError(true); - return; - } else { - chatModel = Object.keys(chatModelProviders[chatModelProvider])[0]; - - if ( - !chatModelProviders || - Object.keys(chatModelProviders).length === 0 - ) - return toast.error('No chat models available'); + if (chatModelProvider === 'custom_openai') { + toast.error('Seems like you are using the custom OpenAI provider, please open the settings and configure the API key and base URL'); + setError(true); + return; + } else { + chatModel = Object.keys(chatModelProviders[chatModelProvider])[0]; + if ( + !chatModelProviders || + Object.keys(chatModelProviders).length === 0 + ) + return toast.error('No chat models available'); + } } - const embeddingModelProviders = providers.embeddingModelProviders; + if (!embeddingModel || !embeddingModelProvider) { + const embeddingModelProviders = providers.embeddingModelProviders; - if ( - !embeddingModelProviders || - Object.keys(embeddingModelProviders).length === 0 - ) - return toast.error('No embedding models available'); + if ( + !embeddingModelProviders || + Object.keys(embeddingModelProviders).length === 0 + ) + return toast.error('No embedding models available'); - embeddingModelProvider = Object.keys(embeddingModelProviders)[0]; - embeddingModel = Object.keys( - embeddingModelProviders[embeddingModelProvider], - )[0]; + embeddingModelProvider = Object.keys(embeddingModelProviders)[0]; + embeddingModel = Object.keys( + embeddingModelProviders[embeddingModelProvider], + )[0]; + } localStorage.setItem('chatModel', chatModel!); localStorage.setItem('chatModelProvider', chatModelProvider); @@ -94,15 +95,6 @@ const useSocket = ( embeddingModelProvider, ); } else { - const providers = await fetch( - `${process.env.NEXT_PUBLIC_API_URL}/models`, - { - headers: { - 'Content-Type': 'app lication/json', - }, - }, - ).then(async (res) => await res.json()); - const chatModelProviders = providers.chatModelProviders; const embeddingModelProviders = providers.embeddingModelProviders; @@ -171,8 +163,6 @@ const useSocket = ( const timeoutId = setTimeout(() => { if (ws.readyState !== 1) { - ws.close(); - setError(true); toast.error( 'Failed to connect to the server. Please try again later.', ); @@ -182,7 +172,6 @@ const useSocket = ( ws.onopen = () => { console.log('[DEBUG] open'); clearTimeout(timeoutId); - setError(false); setIsWSReady(true); }; @@ -203,7 +192,7 @@ const useSocket = ( if (data.type === 'error') { toast.error(data.data); } - }); + }) setWs(ws); }; From e4faa82362348912516e17b5bbae3d9fe2c15413 Mon Sep 17 00:00:00 2001 From: Xie Yanbo <xieyanbo@gmail.com> Date: Fri, 9 Aug 2024 20:53:53 +0800 Subject: [PATCH 003/115] Fix #307, update outdated searxng/settings.yml --- searxng/settings.yml | 2345 +----------------------------------------- 1 file changed, 3 insertions(+), 2342 deletions(-) diff --git a/searxng/settings.yml b/searxng/settings.yml index da973c1..54d27c4 100644 --- a/searxng/settings.yml +++ b/searxng/settings.yml @@ -1,2356 +1,17 @@ -general: - # Debug mode, only for development. Is overwritten by ${SEARXNG_DEBUG} - debug: false - # displayed name - instance_name: 'searxng' - # For example: https://example.com/privacy - privacypolicy_url: false - # use true to use your own donation page written in searx/info/en/donate.md - # use false to disable the donation link - donation_url: false - # mailto:contact@example.com - contact_url: false - # record stats - enable_metrics: true +use_default_settings: true -brand: - new_issue_url: https://github.com/searxng/searxng/issues/new - docs_url: https://docs.searxng.org/ - public_instances: https://searx.space - wiki_url: https://github.com/searxng/searxng/wiki - issue_url: https://github.com/searxng/searxng/issues - # custom: - # maintainer: "Jon Doe" - # # Custom entries in the footer: [title]: [link] - # links: - # Uptime: https://uptime.searxng.org/history/darmarit-org - # About: "https://searxng.org" +general: + instance_name: 'searxng' search: - # Filter results. 0: None, 1: Moderate, 2: Strict - safe_search: 0 - # Existing autocomplete backends: "dbpedia", "duckduckgo", "google", "yandex", "mwmbl", - # "seznam", "startpage", "stract", "swisscows", "qwant", "wikipedia" - leave blank to turn it off - # by default. autocomplete: 'google' - # minimun characters to type before autocompleter starts - autocomplete_min: 4 - # Default search language - leave blank to detect from browser information or - # use codes from 'languages.py' - default_lang: 'auto' - # max_page: 0 # if engine supports paging, 0 means unlimited numbers of pages - # Available languages - # languages: - # - all - # - en - # - en-US - # - de - # - it-IT - # - fr - # - fr-BE - # ban time in seconds after engine errors - ban_time_on_fail: 5 - # max ban time in seconds after engine errors - max_ban_time_on_fail: 120 - suspended_times: - # Engine suspension time after error (in seconds; set to 0 to disable) - # For error "Access denied" and "HTTP error [402, 403]" - SearxEngineAccessDenied: 86400 - # For error "CAPTCHA" - SearxEngineCaptcha: 86400 - # For error "Too many request" and "HTTP error 429" - SearxEngineTooManyRequests: 3600 - # Cloudflare CAPTCHA - cf_SearxEngineCaptcha: 1296000 - cf_SearxEngineAccessDenied: 86400 - # ReCAPTCHA - recaptcha_SearxEngineCaptcha: 604800 - - # remove format to deny access, use lower case. - # formats: [html, csv, json, rss] formats: - html - json server: - # Is overwritten by ${SEARXNG_PORT} and ${SEARXNG_BIND_ADDRESS} - port: 8888 - bind_address: '127.0.0.1' - # public URL of the instance, to ensure correct inbound links. Is overwritten - # by ${SEARXNG_URL}. - base_url: / # "http://example.com/location" - limiter: false # rate limit the number of request on the instance, block some bots - public_instance: false # enable features designed only for public instances - - # If your instance owns a /etc/searxng/settings.yml file, then set the following - # values there. - secret_key: 'a2fb23f1b02e6ee83875b09826990de0f6bd908b6638e8c10277d415f6ab852b' # Is overwritten by ${SEARXNG_SECRET} - # Proxying image results through searx - image_proxy: false - # 1.0 and 1.1 are supported - http_protocol_version: '1.0' - # POST queries are more secure as they don't show up in history but may cause - # problems when using Firefox containers - method: 'POST' - default_http_headers: - X-Content-Type-Options: nosniff - X-Download-Options: noopen - X-Robots-Tag: noindex, nofollow - Referrer-Policy: no-referrer - -redis: - # URL to connect redis database. Is overwritten by ${SEARXNG_REDIS_URL}. - # https://docs.searxng.org/admin/settings/settings_redis.html#settings-redis - url: false - -ui: - # Custom static path - leave it blank if you didn't change - static_path: '' - static_use_hash: false - # Custom templates path - leave it blank if you didn't change - templates_path: '' - # query_in_title: When true, the result page's titles contains the query - # it decreases the privacy, since the browser can records the page titles. - query_in_title: false - # infinite_scroll: When true, automatically loads the next page when scrolling to bottom of the current page. - infinite_scroll: false - # ui theme - default_theme: simple - # center the results ? - center_alignment: false - # URL prefix of the internet archive, don't forget trailing slash (if needed). - # cache_url: "https://webcache.googleusercontent.com/search?q=cache:" - # Default interface locale - leave blank to detect from browser information or - # use codes from the 'locales' config section - default_locale: '' - # Open result links in a new tab by default - # results_on_new_tab: false - theme_args: - # style of simple theme: auto, light, dark - simple_style: auto - # Perform search immediately if a category selected. - # Disable to select multiple categories at once and start the search manually. - search_on_category_select: true - # Hotkeys: default or vim - hotkeys: default - -# Lock arbitrary settings on the preferences page. To find the ID of the user -# setting you want to lock, check the ID of the form on the page "preferences". -# -# preferences: -# lock: -# - language -# - autocomplete -# - method -# - query_in_title - -# searx supports result proxification using an external service: -# https://github.com/asciimoo/morty uncomment below section if you have running -# morty proxy the key is base64 encoded (keep the !!binary notation) -# Note: since commit af77ec3, morty accepts a base64 encoded key. -# -# result_proxy: -# url: http://127.0.0.1:3000/ -# # the key is a base64 encoded string, the YAML !!binary prefix is optional -# key: !!binary "your_morty_proxy_key" -# # [true|false] enable the "proxy" button next to each result -# proxify_results: true - -# communication with search engines -# -outgoing: - # default timeout in seconds, can be override by engine - request_timeout: 3.0 - # the maximum timeout in seconds - # max_request_timeout: 10.0 - # suffix of searx_useragent, could contain information like an email address - # to the administrator - useragent_suffix: '' - # The maximum number of concurrent connections that may be established. - pool_connections: 100 - # Allow the connection pool to maintain keep-alive connections below this - # point. - pool_maxsize: 20 - # See https://www.python-httpx.org/http2/ - enable_http2: true - # uncomment below section if you want to use a custom server certificate - # see https://www.python-httpx.org/advanced/#changing-the-verification-defaults - # and https://www.python-httpx.org/compatibility/#ssl-configuration - # verify: ~/.mitmproxy/mitmproxy-ca-cert.cer - # - # uncomment below section if you want to use a proxyq see: SOCKS proxies - # https://2.python-requests.org/en/latest/user/advanced/#proxies - # are also supported: see - # https://2.python-requests.org/en/latest/user/advanced/#socks - # - # proxies: - # all://: - # - http://proxy1:8080 - # - http://proxy2:8080 - # - # using_tor_proxy: true - # - # Extra seconds to add in order to account for the time taken by the proxy - # - # extra_proxy_timeout: 10.0 - # - # uncomment below section only if you have more than one network interface - # which can be the source of outgoing search requests - # - # source_ips: - # - 1.1.1.1 - # - 1.1.1.2 - # - fe80::/126 - -# External plugin configuration, for more details see -# https://docs.searxng.org/dev/plugins.html -# -# plugins: -# - plugin1 -# - plugin2 -# - ... - -# Comment or un-comment plugin to activate / deactivate by default. -# -# enabled_plugins: -# # these plugins are enabled if nothing is configured .. -# - 'Hash plugin' -# - 'Self Information' -# - 'Tracker URL remover' -# - 'Ahmia blacklist' # activation depends on outgoing.using_tor_proxy -# # these plugins are disabled if nothing is configured .. -# - 'Hostname replace' # see hostname_replace configuration below -# - 'Open Access DOI rewrite' -# - 'Tor check plugin' -# # Read the docs before activate: auto-detection of the language could be -# # detrimental to users expectations / users can activate the plugin in the -# # preferences if they want. -# - 'Autodetect search language' - -# Configuration of the "Hostname replace" plugin: -# -# hostname_replace: -# '(.*\.)?youtube\.com$': 'invidious.example.com' -# '(.*\.)?youtu\.be$': 'invidious.example.com' -# '(.*\.)?youtube-noocookie\.com$': 'yotter.example.com' -# '(.*\.)?reddit\.com$': 'teddit.example.com' -# '(.*\.)?redd\.it$': 'teddit.example.com' -# '(www\.)?twitter\.com$': 'nitter.example.com' -# # to remove matching host names from result list, set value to false -# 'spam\.example\.com': false - -checker: - # disable checker when in debug mode - off_when_debug: true - - # use "scheduling: false" to disable scheduling - # scheduling: interval or int - - # to activate the scheduler: - # * uncomment "scheduling" section - # * add "cache2 = name=searxngcache,items=2000,blocks=2000,blocksize=4096,bitmap=1" - # to your uwsgi.ini - - # scheduling: - # start_after: [300, 1800] # delay to start the first run of the checker - # every: [86400, 90000] # how often the checker runs - - # additional tests: only for the YAML anchors (see the engines section) - # - additional_tests: - rosebud: &test_rosebud - matrix: - query: rosebud - lang: en - result_container: - - not_empty - - ['one_title_contains', 'citizen kane'] - test: - - unique_results - - android: &test_android - matrix: - query: ['android'] - lang: ['en', 'de', 'fr', 'zh-CN'] - result_container: - - not_empty - - ['one_title_contains', 'google'] - test: - - unique_results - - # tests: only for the YAML anchors (see the engines section) - tests: - infobox: &tests_infobox - infobox: - matrix: - query: ['linux', 'new york', 'bbc'] - result_container: - - has_infobox - -categories_as_tabs: - general: - images: - videos: - news: - map: - music: - it: - science: - files: - social media: engines: - - name: 9gag - engine: 9gag - shortcut: 9g - disabled: true - - - name: annas archive - engine: annas_archive - disabled: true - shortcut: aa - - # - name: annas articles - # engine: annas_archive - # shortcut: aaa - # # https://docs.searxng.org/dev/engines/online/annas_archive.html - # aa_content: 'journal_article' # book_any .. magazine, standards_document - # aa_ext: 'pdf' # pdf, epub, .. - # aa_sort: 'newest' # newest, oldest, largest, smallest - - - name: apk mirror - engine: apkmirror - timeout: 4.0 - shortcut: apkm - disabled: true - - - name: apple app store - engine: apple_app_store - shortcut: aps - disabled: true - - # Requires Tor - - name: ahmia - engine: ahmia - categories: onions - enable_http: true - shortcut: ah - - - name: anaconda - engine: xpath - paging: true - first_page_num: 0 - search_url: https://anaconda.org/search?q={query}&page={pageno} - results_xpath: //tbody/tr - url_xpath: ./td/h5/a[last()]/@href - title_xpath: ./td/h5 - content_xpath: ./td[h5]/text() - categories: it - timeout: 6.0 - shortcut: conda - disabled: true - - - name: arch linux wiki - engine: archlinux - shortcut: al - - - name: artic - engine: artic - shortcut: arc - timeout: 4.0 - - - name: arxiv - engine: arxiv - shortcut: arx - timeout: 4.0 - - - name: ask - engine: ask - shortcut: ask - disabled: true - - # tmp suspended: dh key too small - # - name: base - # engine: base - # shortcut: bs - - - name: bandcamp - engine: bandcamp - shortcut: bc - categories: music - - - name: wikipedia - engine: wikipedia - shortcut: wp - # add "list" to the array to get results in the results list - display_type: ['infobox'] - base_url: 'https://{language}.wikipedia.org/' - categories: [general] - - - name: bilibili - engine: bilibili - shortcut: bil - disabled: true - - - name: bing - engine: bing - shortcut: bi - disabled: true - - - name: bing images - engine: bing_images - shortcut: bii - - - name: bing news - engine: bing_news - shortcut: bin - - - name: bing videos - engine: bing_videos - shortcut: biv - - - name: bitbucket - engine: xpath - paging: true - search_url: https://bitbucket.org/repo/all/{pageno}?name={query} - url_xpath: //article[@class="repo-summary"]//a[@class="repo-link"]/@href - title_xpath: //article[@class="repo-summary"]//a[@class="repo-link"] - content_xpath: //article[@class="repo-summary"]/p - categories: [it, repos] - timeout: 4.0 - disabled: true - shortcut: bb - about: - website: https://bitbucket.org/ - wikidata_id: Q2493781 - official_api_documentation: https://developer.atlassian.com/bitbucket - use_official_api: false - require_api_key: false - results: HTML - - - name: bpb - engine: bpb - shortcut: bpb - disabled: true - - - name: btdigg - engine: btdigg - shortcut: bt - disabled: true - - - name: ccc-tv - engine: xpath - paging: false - search_url: https://media.ccc.de/search/?q={query} - url_xpath: //div[@class="caption"]/h3/a/@href - title_xpath: //div[@class="caption"]/h3/a/text() - content_xpath: //div[@class="caption"]/h4/@title - categories: videos - disabled: true - shortcut: c3tv - about: - website: https://media.ccc.de/ - wikidata_id: Q80729951 - official_api_documentation: https://github.com/voc/voctoweb - use_official_api: false - require_api_key: false - results: HTML - # We don't set language: de here because media.ccc.de is not just - # for a German audience. It contains many English videos and many - # German videos have English subtitles. - - - name: openverse - engine: openverse - categories: images - shortcut: opv - - - name: chefkoch - engine: chefkoch - shortcut: chef - # to show premium or plus results too: - # skip_premium: false - - # - name: core.ac.uk - # engine: core - # categories: science - # shortcut: cor - # # get your API key from: https://core.ac.uk/api-keys/register/ - # api_key: 'unset' - - - name: crossref - engine: crossref - shortcut: cr - timeout: 30 - disabled: true - - - name: crowdview - engine: json_engine - shortcut: cv - categories: general - paging: false - search_url: https://crowdview-next-js.onrender.com/api/search-v3?query={query} - results_query: results - url_query: link - title_query: title - content_query: snippet - disabled: true - about: - website: https://crowdview.ai/ - - - name: yep - engine: yep - shortcut: yep - categories: general - search_type: web - disabled: true - - - name: yep images - engine: yep - shortcut: yepi - categories: images - search_type: images - disabled: true - - - name: yep news - engine: yep - shortcut: yepn - categories: news - search_type: news - disabled: true - - - name: curlie - engine: xpath - shortcut: cl - categories: general - disabled: true - paging: true - lang_all: '' - search_url: https://curlie.org/search?q={query}&lang={lang}&start={pageno}&stime=92452189 - page_size: 20 - results_xpath: //div[@id="site-list-content"]/div[@class="site-item"] - url_xpath: ./div[@class="title-and-desc"]/a/@href - title_xpath: ./div[@class="title-and-desc"]/a/div - content_xpath: ./div[@class="title-and-desc"]/div[@class="site-descr"] - about: - website: https://curlie.org/ - wikidata_id: Q60715723 - use_official_api: false - require_api_key: false - results: HTML - - - name: currency - engine: currency_convert - categories: general - shortcut: cc - - - name: bahnhof - engine: json_engine - search_url: https://www.bahnhof.de/api/stations/search/{query} - url_prefix: https://www.bahnhof.de/ - url_query: slug - title_query: name - content_query: state - shortcut: bf - disabled: true - about: - website: https://www.bahn.de - wikidata_id: Q22811603 - use_official_api: false - require_api_key: false - results: JSON - language: de - - - name: deezer - engine: deezer - shortcut: dz - disabled: true - - - name: destatis - engine: destatis - shortcut: destat - disabled: true - - - name: deviantart - engine: deviantart - shortcut: da - timeout: 3.0 - - - name: ddg definitions - engine: duckduckgo_definitions - shortcut: ddd - weight: 2 - disabled: true - tests: *tests_infobox - - # cloudflare protected - # - name: digbt - # engine: digbt - # shortcut: dbt - # timeout: 6.0 - # disabled: true - - - name: docker hub - engine: docker_hub - shortcut: dh - categories: [it, packages] - - - name: erowid - engine: xpath - paging: true - first_page_num: 0 - page_size: 30 - search_url: https://www.erowid.org/search.php?q={query}&s={pageno} - url_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/@href - title_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/text() - content_xpath: //dl[@class="results-list"]/dd[@class="result-details"] - categories: [] - shortcut: ew - disabled: true - about: - website: https://www.erowid.org/ - wikidata_id: Q1430691 - official_api_documentation: - use_official_api: false - require_api_key: false - results: HTML - - # - name: elasticsearch - # shortcut: es - # engine: elasticsearch - # base_url: http://localhost:9200 - # username: elastic - # password: changeme - # index: my-index - # # available options: match, simple_query_string, term, terms, custom - # query_type: match - # # if query_type is set to custom, provide your query here - # #custom_query_json: {"query":{"match_all": {}}} - # #show_metadata: false - # disabled: true - - - name: wikidata - engine: wikidata - shortcut: wd - timeout: 3.0 - weight: 2 - # add "list" to the array to get results in the results list - display_type: ['infobox'] - tests: *tests_infobox - categories: [general] - - - name: duckduckgo - engine: duckduckgo - shortcut: ddg - - - name: duckduckgo images - engine: duckduckgo_extra - categories: [images, web] - ddg_category: images - shortcut: ddi - disabled: true - - - name: duckduckgo videos - engine: duckduckgo_extra - categories: [videos, web] - ddg_category: videos - shortcut: ddv - disabled: true - - - name: duckduckgo news - engine: duckduckgo_extra - categories: [news, web] - ddg_category: news - shortcut: ddn - disabled: true - - - name: duckduckgo weather - engine: duckduckgo_weather - shortcut: ddw - disabled: true - - - name: apple maps - engine: apple_maps - shortcut: apm - disabled: true - timeout: 5.0 - - - name: emojipedia - engine: emojipedia - timeout: 4.0 - shortcut: em - disabled: true - - - name: tineye - engine: tineye - shortcut: tin - timeout: 9.0 - disabled: true - - - name: etymonline - engine: xpath - paging: true - search_url: https://etymonline.com/search?page={pageno}&q={query} - url_xpath: //a[contains(@class, "word__name--")]/@href - title_xpath: //a[contains(@class, "word__name--")] - content_xpath: //section[contains(@class, "word__defination")] - first_page_num: 1 - shortcut: et - categories: [dictionaries] - about: - website: https://www.etymonline.com/ - wikidata_id: Q1188617 - official_api_documentation: - use_official_api: false - require_api_key: false - results: HTML - - # - name: ebay - # engine: ebay - # shortcut: eb - # base_url: 'https://www.ebay.com' - # disabled: true - # timeout: 5 - - - name: 1x - engine: www1x - shortcut: 1x - timeout: 3.0 - disabled: true - - - name: fdroid - engine: fdroid - shortcut: fd - disabled: true - - - name: flickr - categories: images - shortcut: fl - # You can use the engine using the official stable API, but you need an API - # key, see: https://www.flickr.com/services/apps/create/ - # engine: flickr - # api_key: 'apikey' # required! - # Or you can use the html non-stable engine, activated by default - engine: flickr_noapi - - - name: free software directory - engine: mediawiki - shortcut: fsd - categories: [it, software wikis] - base_url: https://directory.fsf.org/ - search_type: title - timeout: 5.0 - disabled: true - about: - website: https://directory.fsf.org/ - wikidata_id: Q2470288 - - # - name: freesound - # engine: freesound - # shortcut: fnd - # disabled: true - # timeout: 15.0 - # API key required, see: https://freesound.org/docs/api/overview.html - # api_key: MyAPIkey - - - name: frinkiac - engine: frinkiac - shortcut: frk - disabled: true - - - name: fyyd - engine: fyyd - shortcut: fy - timeout: 8.0 - disabled: true - - - name: genius - engine: genius - shortcut: gen - - - name: gentoo - engine: gentoo - shortcut: ge - timeout: 10.0 - - - name: gitlab - engine: json_engine - paging: true - search_url: https://gitlab.com/api/v4/projects?search={query}&page={pageno} - url_query: web_url - title_query: name_with_namespace - content_query: description - page_size: 20 - categories: [it, repos] - shortcut: gl - timeout: 10.0 - disabled: true - about: - website: https://about.gitlab.com/ - wikidata_id: Q16639197 - official_api_documentation: https://docs.gitlab.com/ee/api/ - use_official_api: false - require_api_key: false - results: JSON - - - name: github - engine: github - shortcut: gh - - # This a Gitea service. If you would like to use a different instance, - # change codeberg.org to URL of the desired Gitea host. Or you can create a - # new engine by copying this and changing the name, shortcut and search_url. - - - name: codeberg - engine: json_engine - search_url: https://codeberg.org/api/v1/repos/search?q={query}&limit=10 - url_query: html_url - title_query: name - content_query: description - categories: [it, repos] - shortcut: cb - disabled: true - about: - website: https://codeberg.org/ - wikidata_id: - official_api_documentation: https://try.gitea.io/api/swagger - use_official_api: false - require_api_key: false - results: JSON - - - name: goodreads - engine: goodreads - shortcut: good - timeout: 4.0 - disabled: true - - - name: google - engine: google - shortcut: go - # additional_tests: - # android: *test_android - - - name: google images - engine: google_images - shortcut: goi - # additional_tests: - # android: *test_android - # dali: - # matrix: - # query: ['Dali Christ'] - # lang: ['en', 'de', 'fr', 'zh-CN'] - # result_container: - # - ['one_title_contains', 'Salvador'] - - - name: google news - engine: google_news - shortcut: gon - # additional_tests: - # android: *test_android - - - name: google videos - engine: google_videos - shortcut: gov - # additional_tests: - # android: *test_android - - - name: google scholar - engine: google_scholar - shortcut: gos - - - name: google play apps - engine: google_play - categories: [files, apps] - shortcut: gpa - play_categ: apps - disabled: true - - - name: google play movies - engine: google_play - categories: videos - shortcut: gpm - play_categ: movies - disabled: true - - - name: material icons - engine: material_icons - categories: images - shortcut: mi - disabled: true - - - name: gpodder - engine: json_engine - shortcut: gpod - timeout: 4.0 - paging: false - search_url: https://gpodder.net/search.json?q={query} - url_query: url - title_query: title - content_query: description - page_size: 19 - categories: music - disabled: true - about: - website: https://gpodder.net - wikidata_id: Q3093354 - official_api_documentation: https://gpoddernet.readthedocs.io/en/latest/api/ - use_official_api: false - requires_api_key: false - results: JSON - - - name: habrahabr - engine: xpath - paging: true - search_url: https://habr.com/en/search/page{pageno}/?q={query} - results_xpath: //article[contains(@class, "tm-articles-list__item")] - url_xpath: .//a[@class="tm-title__link"]/@href - title_xpath: .//a[@class="tm-title__link"] - content_xpath: .//div[contains(@class, "article-formatted-body")] - categories: it - timeout: 4.0 - disabled: true - shortcut: habr - about: - website: https://habr.com/ - wikidata_id: Q4494434 - official_api_documentation: https://habr.com/en/docs/help/api/ - use_official_api: false - require_api_key: false - results: HTML - - - name: hackernews - engine: hackernews - shortcut: hn - disabled: true - - - name: hoogle - engine: xpath - paging: true - search_url: https://hoogle.haskell.org/?hoogle={query}&start={pageno} - results_xpath: '//div[@class="result"]' - title_xpath: './/div[@class="ans"]//a' - url_xpath: './/div[@class="ans"]//a/@href' - content_xpath: './/div[@class="from"]' - page_size: 20 - categories: [it, packages] - shortcut: ho - about: - website: https://hoogle.haskell.org/ - wikidata_id: Q34010 - official_api_documentation: https://hackage.haskell.org/api - use_official_api: false - require_api_key: false - results: JSON - - - name: imdb - engine: imdb - shortcut: imdb - timeout: 6.0 - disabled: true - - - name: imgur - engine: imgur - shortcut: img - disabled: true - - - name: ina - engine: ina - shortcut: in - timeout: 6.0 - disabled: true - - - name: invidious - engine: invidious - # Instanes will be selected randomly, see https://api.invidious.io/ for - # instances that are stable (good uptime) and close to you. - base_url: - - https://invidious.io.lol - - https://invidious.fdn.fr - - https://yt.artemislena.eu - - https://invidious.tiekoetter.com - - https://invidious.flokinet.to - - https://vid.puffyan.us - - https://invidious.privacydev.net - - https://inv.tux.pizza - shortcut: iv - timeout: 3.0 - disabled: true - - - name: jisho - engine: jisho - shortcut: js - timeout: 3.0 - disabled: true - - - name: kickass - engine: kickass - base_url: - - https://kickasstorrents.to - - https://kickasstorrents.cr - - https://kickasstorrent.cr - - https://kickass.sx - - https://kat.am - shortcut: kc - timeout: 4.0 - - - name: lemmy communities - engine: lemmy - lemmy_type: Communities - shortcut: leco - - - name: lemmy users - engine: lemmy - network: lemmy communities - lemmy_type: Users - shortcut: leus - - - name: lemmy posts - engine: lemmy - network: lemmy communities - lemmy_type: Posts - shortcut: lepo - - - name: lemmy comments - engine: lemmy - network: lemmy communities - lemmy_type: Comments - shortcut: lecom - - - name: library genesis - engine: xpath - # search_url: https://libgen.is/search.php?req={query} - search_url: https://libgen.rs/search.php?req={query} - url_xpath: //a[contains(@href,"book/index.php?md5")]/@href - title_xpath: //a[contains(@href,"book/")]/text()[1] - content_xpath: //td/a[1][contains(@href,"=author")]/text() - categories: files - timeout: 7.0 - disabled: true - shortcut: lg - about: - website: https://libgen.fun/ - wikidata_id: Q22017206 - official_api_documentation: - use_official_api: false - require_api_key: false - results: HTML - - - name: z-library - engine: zlibrary - shortcut: zlib - categories: files - timeout: 7.0 - - - name: library of congress - engine: loc - shortcut: loc - categories: images - - - name: lingva - engine: lingva - shortcut: lv - # set lingva instance in url, by default it will use the official instance - # url: https://lingva.thedaviddelta.com - - - name: lobste.rs - engine: xpath - search_url: https://lobste.rs/search?utf8=%E2%9C%93&q={query}&what=stories&order=relevance - results_xpath: //li[contains(@class, "story")] - url_xpath: .//a[@class="u-url"]/@href - title_xpath: .//a[@class="u-url"] - content_xpath: .//a[@class="domain"] - categories: it - shortcut: lo - timeout: 5.0 - disabled: true - about: - website: https://lobste.rs/ - wikidata_id: Q60762874 - official_api_documentation: - use_official_api: false - require_api_key: false - results: HTML - - - name: mastodon users - engine: mastodon - mastodon_type: accounts - base_url: https://mastodon.social - shortcut: mau - - - name: mastodon hashtags - engine: mastodon - mastodon_type: hashtags - base_url: https://mastodon.social - shortcut: mah - - # - name: matrixrooms - # engine: mrs - # # https://docs.searxng.org/dev/engines/online/mrs.html - # # base_url: https://mrs-api-host - # shortcut: mtrx - # disabled: true - - - name: mdn - shortcut: mdn - engine: json_engine - categories: [it] - paging: true - search_url: https://developer.mozilla.org/api/v1/search?q={query}&page={pageno} - results_query: documents - url_query: mdn_url - url_prefix: https://developer.mozilla.org - title_query: title - content_query: summary - about: - website: https://developer.mozilla.org - wikidata_id: Q3273508 - official_api_documentation: null - use_official_api: false - require_api_key: false - results: JSON - - - name: metacpan - engine: metacpan - shortcut: cpan - disabled: true - number_of_results: 20 - - # - name: meilisearch - # engine: meilisearch - # shortcut: mes - # enable_http: true - # base_url: http://localhost:7700 - # index: my-index - - - name: mixcloud - engine: mixcloud - shortcut: mc - - # MongoDB engine - # Required dependency: pymongo - # - name: mymongo - # engine: mongodb - # shortcut: md - # exact_match_only: false - # host: '127.0.0.1' - # port: 27017 - # enable_http: true - # results_per_page: 20 - # database: 'business' - # collection: 'reviews' # name of the db collection - # key: 'name' # key in the collection to search for - - - name: mozhi - engine: mozhi - base_url: - - https://mozhi.aryak.me - - https://translate.bus-hit.me - - https://nyc1.mz.ggtyler.dev - # mozhi_engine: google - see https://mozhi.aryak.me for supported engines - timeout: 4.0 - shortcut: mz - disabled: true - - - name: mwmbl - engine: mwmbl - # api_url: https://api.mwmbl.org - shortcut: mwm - disabled: true - - - name: npm - engine: json_engine - paging: true - first_page_num: 0 - search_url: https://api.npms.io/v2/search?q={query}&size=25&from={pageno} - results_query: results - url_query: package/links/npm - title_query: package/name - content_query: package/description - page_size: 25 - categories: [it, packages] - disabled: true - timeout: 5.0 - shortcut: npm - about: - website: https://npms.io/ - wikidata_id: Q7067518 - official_api_documentation: https://api-docs.npms.io/ - use_official_api: false - require_api_key: false - results: JSON - - - name: nyaa - engine: nyaa - shortcut: nt - disabled: true - - - name: mankier - engine: json_engine - search_url: https://www.mankier.com/api/v2/mans/?q={query} - results_query: results - url_query: url - title_query: name - content_query: description - categories: it - shortcut: man - about: - website: https://www.mankier.com/ - official_api_documentation: https://www.mankier.com/api - use_official_api: true - require_api_key: false - results: JSON - - - name: odysee - engine: odysee - shortcut: od - disabled: true - - - name: openairedatasets - engine: json_engine - paging: true - search_url: https://api.openaire.eu/search/datasets?format=json&page={pageno}&size=10&title={query} - results_query: response/results/result - url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$ - title_query: metadata/oaf:entity/oaf:result/title/$ - content_query: metadata/oaf:entity/oaf:result/description/$ - content_html_to_text: true - categories: 'science' - shortcut: oad - timeout: 5.0 - about: - website: https://www.openaire.eu/ - wikidata_id: Q25106053 - official_api_documentation: https://api.openaire.eu/ - use_official_api: false - require_api_key: false - results: JSON - - - name: openairepublications - engine: json_engine - paging: true - search_url: https://api.openaire.eu/search/publications?format=json&page={pageno}&size=10&title={query} - results_query: response/results/result - url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$ - title_query: metadata/oaf:entity/oaf:result/title/$ - content_query: metadata/oaf:entity/oaf:result/description/$ - content_html_to_text: true - categories: science - shortcut: oap - timeout: 5.0 - about: - website: https://www.openaire.eu/ - wikidata_id: Q25106053 - official_api_documentation: https://api.openaire.eu/ - use_official_api: false - require_api_key: false - results: JSON - - # - name: opensemanticsearch - # engine: opensemantic - # shortcut: oss - # base_url: 'http://localhost:8983/solr/opensemanticsearch/' - - - name: openstreetmap - engine: openstreetmap - shortcut: osm - - - name: openrepos - engine: xpath - paging: true - search_url: https://openrepos.net/search/node/{query}?page={pageno} - url_xpath: //li[@class="search-result"]//h3[@class="title"]/a/@href - title_xpath: //li[@class="search-result"]//h3[@class="title"]/a - content_xpath: //li[@class="search-result"]//div[@class="search-snippet-info"]//p[@class="search-snippet"] - categories: files - timeout: 4.0 - disabled: true - shortcut: or - about: - website: https://openrepos.net/ - wikidata_id: - official_api_documentation: - use_official_api: false - require_api_key: false - results: HTML - - - name: packagist - engine: json_engine - paging: true - search_url: https://packagist.org/search.json?q={query}&page={pageno} - results_query: results - url_query: url - title_query: name - content_query: description - categories: [it, packages] - disabled: true - timeout: 5.0 - shortcut: pack - about: - website: https://packagist.org - wikidata_id: Q108311377 - official_api_documentation: https://packagist.org/apidoc - use_official_api: true - require_api_key: false - results: JSON - - - name: pdbe - engine: pdbe - shortcut: pdb - # Hide obsolete PDB entries. Default is not to hide obsolete structures - # hide_obsolete: false - - - name: photon - engine: photon - shortcut: ph - - - name: pinterest - engine: pinterest - shortcut: pin - - - name: piped - engine: piped - shortcut: ppd - categories: videos - piped_filter: videos - timeout: 3.0 - - # URL to use as link and for embeds - frontend_url: https://srv.piped.video - # Instance will be selected randomly, for more see https://piped-instances.kavin.rocks/ - backend_url: - - https://pipedapi.kavin.rocks - - https://pipedapi-libre.kavin.rocks - - https://pipedapi.adminforge.de - - - name: piped.music - engine: piped - network: piped - shortcut: ppdm - categories: music - piped_filter: music_songs - timeout: 3.0 - - - name: piratebay - engine: piratebay - shortcut: tpb - # You may need to change this URL to a proxy if piratebay is blocked in your - # country - url: https://thepiratebay.org/ - timeout: 3.0 - - - name: podcastindex - engine: podcastindex - shortcut: podcast - - # Required dependency: psychopg2 - # - name: postgresql - # engine: postgresql - # database: postgres - # username: postgres - # password: postgres - # limit: 10 - # query_str: 'SELECT * from my_table WHERE my_column = %(query)s' - # shortcut : psql - - - name: presearch - engine: presearch - search_type: search - categories: [general, web] - shortcut: ps - timeout: 4.0 - disabled: true - - - name: presearch images - engine: presearch - network: presearch - search_type: images - categories: [images, web] - timeout: 4.0 - shortcut: psimg - disabled: true - - - name: presearch videos - engine: presearch - network: presearch - search_type: videos - categories: [general, web] - timeout: 4.0 - shortcut: psvid - disabled: true - - - name: presearch news - engine: presearch - network: presearch - search_type: news - categories: [news, web] - timeout: 4.0 - shortcut: psnews - disabled: true - - - name: pub.dev - engine: xpath - shortcut: pd - search_url: https://pub.dev/packages?q={query}&page={pageno} - paging: true - results_xpath: //div[contains(@class,"packages-item")] - url_xpath: ./div/h3/a/@href - title_xpath: ./div/h3/a - content_xpath: ./div/div/div[contains(@class,"packages-description")]/span - categories: [packages, it] - timeout: 3.0 - disabled: true - first_page_num: 1 - about: - website: https://pub.dev/ - official_api_documentation: https://pub.dev/help/api - use_official_api: false - require_api_key: false - results: HTML - - - name: pubmed - engine: pubmed - shortcut: pub - timeout: 3.0 - - - name: pypi - shortcut: pypi - engine: xpath - paging: true - search_url: https://pypi.org/search/?q={query}&page={pageno} - results_xpath: /html/body/main/div/div/div/form/div/ul/li/a[@class="package-snippet"] - url_xpath: ./@href - title_xpath: ./h3/span[@class="package-snippet__name"] - content_xpath: ./p - suggestion_xpath: /html/body/main/div/div/div/form/div/div[@class="callout-block"]/p/span/a[@class="link"] - first_page_num: 1 - categories: [it, packages] - about: - website: https://pypi.org - wikidata_id: Q2984686 - official_api_documentation: https://warehouse.readthedocs.io/api-reference/index.html - use_official_api: false - require_api_key: false - results: HTML - - - name: qwant - qwant_categ: web - engine: qwant - shortcut: qw - categories: [general, web] - additional_tests: - rosebud: *test_rosebud - - - name: qwant news - qwant_categ: news - engine: qwant - shortcut: qwn - categories: news - network: qwant - - - name: qwant images - qwant_categ: images - engine: qwant - shortcut: qwi - categories: [images, web] - network: qwant - - - name: qwant videos - qwant_categ: videos - engine: qwant - shortcut: qwv - categories: [videos, web] - network: qwant - - # - name: library - # engine: recoll - # shortcut: lib - # base_url: 'https://recoll.example.org/' - # search_dir: '' - # mount_prefix: /export - # dl_prefix: 'https://download.example.org' - # timeout: 30.0 - # categories: files - # disabled: true - - # - name: recoll library reference - # engine: recoll - # base_url: 'https://recoll.example.org/' - # search_dir: reference - # mount_prefix: /export - # dl_prefix: 'https://download.example.org' - # shortcut: libr - # timeout: 30.0 - # categories: files - # disabled: true - - - name: radio browser - engine: radio_browser - shortcut: rb - - - name: reddit - engine: reddit - shortcut: re - page_size: 25 - - - name: rottentomatoes - engine: rottentomatoes - shortcut: rt - disabled: true - - # Required dependency: redis - # - name: myredis - # shortcut : rds - # engine: redis_server - # exact_match_only: false - # host: '127.0.0.1' - # port: 6379 - # enable_http: true - # password: '' - # db: 0 - - # tmp suspended: bad certificate - # - name: scanr structures - # shortcut: scs - # engine: scanr_structures - # disabled: true - - - name: sepiasearch - engine: sepiasearch - shortcut: sep - - - name: soundcloud - engine: soundcloud - shortcut: sc - - - name: stackoverflow - engine: stackexchange - shortcut: st - api_site: 'stackoverflow' - categories: [it, q&a] - - - name: askubuntu - engine: stackexchange - shortcut: ubuntu - api_site: 'askubuntu' - categories: [it, q&a] - - - name: internetarchivescholar - engine: internet_archive_scholar - shortcut: ias - timeout: 5.0 - - - name: superuser - engine: stackexchange - shortcut: su - api_site: 'superuser' - categories: [it, q&a] - - - name: searchcode code - engine: searchcode_code - shortcut: scc - disabled: true - - # - name: searx - # engine: searx_engine - # shortcut: se - # instance_urls : - # - http://127.0.0.1:8888/ - # - ... - # disabled: true - - - name: semantic scholar - engine: semantic_scholar - disabled: true - shortcut: se - - # Spotify needs API credentials - # - name: spotify - # engine: spotify - # shortcut: stf - # api_client_id: ******* - # api_client_secret: ******* - - # - name: solr - # engine: solr - # shortcut: slr - # base_url: http://localhost:8983 - # collection: collection_name - # sort: '' # sorting: asc or desc - # field_list: '' # comma separated list of field names to display on the UI - # default_fields: '' # default field to query - # query_fields: '' # query fields - # enable_http: true - - # - name: springer nature - # engine: springer - # # get your API key from: https://dev.springernature.com/signup - # # working API key, for test & debug: "a69685087d07eca9f13db62f65b8f601" - # api_key: 'unset' - # shortcut: springer - # timeout: 15.0 - - - name: startpage - engine: startpage - shortcut: sp - timeout: 6.0 - disabled: true - additional_tests: - rosebud: *test_rosebud - - - name: tokyotoshokan - engine: tokyotoshokan - shortcut: tt - timeout: 6.0 - disabled: true - - - name: solidtorrents - engine: solidtorrents - shortcut: solid - timeout: 4.0 - base_url: - - https://solidtorrents.to - - https://bitsearch.to - - # For this demo of the sqlite engine download: - # https://liste.mediathekview.de/filmliste-v2.db.bz2 - # and unpack into searx/data/filmliste-v2.db - # Query to test: "!demo concert" - # - # - name: demo - # engine: sqlite - # shortcut: demo - # categories: general - # result_template: default.html - # database: searx/data/filmliste-v2.db - # query_str: >- - # SELECT title || ' (' || time(duration, 'unixepoch') || ')' AS title, - # COALESCE( NULLIF(url_video_hd,''), NULLIF(url_video_sd,''), url_video) AS url, - # description AS content - # FROM film - # WHERE title LIKE :wildcard OR description LIKE :wildcard - # ORDER BY duration DESC - - - name: tagesschau - engine: tagesschau - # when set to false, display URLs from Tagesschau, and not the actual source - # (e.g. NDR, WDR, SWR, HR, ...) - use_source_url: true - shortcut: ts - disabled: true - - - name: tmdb - engine: xpath - paging: true - categories: movies - search_url: https://www.themoviedb.org/search?page={pageno}&query={query} - results_xpath: //div[contains(@class,"movie") or contains(@class,"tv")]//div[contains(@class,"card")] - url_xpath: .//div[contains(@class,"poster")]/a/@href - thumbnail_xpath: .//img/@src - title_xpath: .//div[contains(@class,"title")]//h2 - content_xpath: .//div[contains(@class,"overview")] - shortcut: tm - disabled: true - - # Requires Tor - - name: torch - engine: xpath - paging: true - search_url: http://xmh57jrknzkhv6y3ls3ubitzfqnkrwxhopf5aygthi7d6rplyvk3noyd.onion/cgi-bin/omega/omega?P={query}&DEFAULTOP=and - results_xpath: //table//tr - url_xpath: ./td[2]/a - title_xpath: ./td[2]/b - content_xpath: ./td[2]/small - categories: onions - enable_http: true - shortcut: tch - - # torznab engine lets you query any torznab compatible indexer. Using this - # engine in combination with Jackett opens the possibility to query a lot of - # public and private indexers directly from SearXNG. More details at: - # https://docs.searxng.org/dev/engines/online/torznab.html - # - # - name: Torznab EZTV - # engine: torznab - # shortcut: eztv - # base_url: http://localhost:9117/api/v2.0/indexers/eztv/results/torznab - # enable_http: true # if using localhost - # api_key: xxxxxxxxxxxxxxx - # show_magnet_links: true - # show_torrent_files: false - # # https://github.com/Jackett/Jackett/wiki/Jackett-Categories - # torznab_categories: # optional - # - 2000 - # - 5000 - - # tmp suspended - too slow, too many errors - # - name: urbandictionary - # engine : xpath - # search_url : https://www.urbandictionary.com/define.php?term={query} - # url_xpath : //*[@class="word"]/@href - # title_xpath : //*[@class="def-header"] - # content_xpath: //*[@class="meaning"] - # shortcut: ud - - - name: unsplash - engine: unsplash - shortcut: us - - - name: yandex music - engine: yandex_music - shortcut: ydm - disabled: true - # https://yandex.com/support/music/access.html - inactive: true - - - name: yahoo - engine: yahoo - shortcut: yh - disabled: true - - - name: yahoo news - engine: yahoo_news - shortcut: yhn - - - name: youtube - shortcut: yt - # You can use the engine using the official stable API, but you need an API - # key See: https://console.developers.google.com/project - # - # engine: youtube_api - # api_key: 'apikey' # required! - # - # Or you can use the html non-stable engine, activated by default - engine: youtube_noapi - - - name: dailymotion - engine: dailymotion - shortcut: dm - - - name: vimeo - engine: vimeo - shortcut: vm - - - name: wiby - engine: json_engine - paging: true - search_url: https://wiby.me/json/?q={query}&p={pageno} - url_query: URL - title_query: Title - content_query: Snippet - categories: [general, web] - shortcut: wib - disabled: true - about: - website: https://wiby.me/ - - - name: alexandria - engine: json_engine - shortcut: alx - categories: general - paging: true - search_url: https://api.alexandria.org/?a=1&q={query}&p={pageno} - results_query: results - title_query: title - url_query: url - content_query: snippet - timeout: 1.5 - disabled: true - about: - website: https://alexandria.org/ - official_api_documentation: https://github.com/alexandria-org/alexandria-api/raw/master/README.md - use_official_api: true - require_api_key: false - results: JSON - - - name: wikibooks - engine: mediawiki - weight: 0.5 - shortcut: wb - categories: [general, wikimedia] - base_url: 'https://{language}.wikibooks.org/' - search_type: text - disabled: true - about: - website: https://www.wikibooks.org/ - wikidata_id: Q367 - - - name: wikinews - engine: mediawiki - shortcut: wn - categories: [news, wikimedia] - base_url: 'https://{language}.wikinews.org/' - search_type: text - srsort: create_timestamp_desc - about: - website: https://www.wikinews.org/ - wikidata_id: Q964 - - - name: wikiquote - engine: mediawiki - weight: 0.5 - shortcut: wq - categories: [general, wikimedia] - base_url: 'https://{language}.wikiquote.org/' - search_type: text - disabled: true - additional_tests: - rosebud: *test_rosebud - about: - website: https://www.wikiquote.org/ - wikidata_id: Q369 - - - name: wikisource - engine: mediawiki - weight: 0.5 - shortcut: ws - categories: [general, wikimedia] - base_url: 'https://{language}.wikisource.org/' - search_type: text - disabled: true - about: - website: https://www.wikisource.org/ - wikidata_id: Q263 - - - name: wikispecies - engine: mediawiki - shortcut: wsp - categories: [general, science, wikimedia] - base_url: 'https://species.wikimedia.org/' - search_type: text - disabled: true - about: - website: https://species.wikimedia.org/ - wikidata_id: Q13679 - - - name: wiktionary - engine: mediawiki - shortcut: wt - categories: [dictionaries, wikimedia] - base_url: 'https://{language}.wiktionary.org/' - search_type: text - about: - website: https://www.wiktionary.org/ - wikidata_id: Q151 - - - name: wikiversity - engine: mediawiki - weight: 0.5 - shortcut: wv - categories: [general, wikimedia] - base_url: 'https://{language}.wikiversity.org/' - search_type: text - disabled: true - about: - website: https://www.wikiversity.org/ - wikidata_id: Q370 - - - name: wikivoyage - engine: mediawiki - weight: 0.5 - shortcut: wy - categories: [general, wikimedia] - base_url: 'https://{language}.wikivoyage.org/' - search_type: text - disabled: true - about: - website: https://www.wikivoyage.org/ - wikidata_id: Q373 - - - name: wikicommons.images - engine: wikicommons - shortcut: wc - categories: images - number_of_results: 10 - - name: wolframalpha - shortcut: wa - # You can use the engine using the official stable API, but you need an API - # key. See: https://products.wolframalpha.com/api/ - # - # engine: wolframalpha_api - # api_key: '' - # - # Or you can use the html non-stable engine, activated by default - engine: wolframalpha_noapi - timeout: 6.0 - categories: general disabled: false - - - name: dictzone - engine: dictzone - shortcut: dc - - - name: mymemory translated - engine: translated - shortcut: tl - timeout: 5.0 - # You can use without an API key, but you are limited to 1000 words/day - # See: https://mymemory.translated.net/doc/usagelimits.php - # api_key: '' - - # Required dependency: mysql-connector-python - # - name: mysql - # engine: mysql_server - # database: mydatabase - # username: user - # password: pass - # limit: 10 - # query_str: 'SELECT * from mytable WHERE fieldname=%(query)s' - # shortcut: mysql - - - name: 1337x - engine: 1337x - shortcut: 1337x - disabled: true - - - name: duden - engine: duden - shortcut: du - disabled: true - - - name: seznam - shortcut: szn - engine: seznam - disabled: true - - # - name: deepl - # engine: deepl - # shortcut: dpl - # # You can use the engine using the official stable API, but you need an API key - # # See: https://www.deepl.com/pro-api?cta=header-pro-api - # api_key: '' # required! - # timeout: 5.0 - # disabled: true - - - name: mojeek - shortcut: mjk - engine: xpath - paging: true - categories: [general, web] - search_url: https://www.mojeek.com/search?q={query}&s={pageno}&lang={lang}&lb={lang} - results_xpath: //ul[@class="results-standard"]/li/a[@class="ob"] - url_xpath: ./@href - title_xpath: ../h2/a - content_xpath: ..//p[@class="s"] - suggestion_xpath: //div[@class="top-info"]/p[@class="top-info spell"]/em/a - first_page_num: 0 - page_size: 10 - max_page: 100 - disabled: true - about: - website: https://www.mojeek.com/ - wikidata_id: Q60747299 - official_api_documentation: https://www.mojeek.com/services/api.html/ - use_official_api: false - require_api_key: false - results: HTML - - - name: moviepilot - engine: moviepilot - shortcut: mp - disabled: true - - - name: naver - shortcut: nvr - categories: [general, web] - engine: xpath - paging: true - search_url: https://search.naver.com/search.naver?where=webkr&sm=osp_hty&ie=UTF-8&query={query}&start={pageno} - url_xpath: //a[@class="link_tit"]/@href - title_xpath: //a[@class="link_tit"] - content_xpath: //a[@class="total_dsc"]/div - first_page_num: 1 - page_size: 10 - disabled: true - about: - website: https://www.naver.com/ - wikidata_id: Q485639 - official_api_documentation: https://developers.naver.com/docs/nmt/examples/ - use_official_api: false - require_api_key: false - results: HTML - language: ko - - - name: rubygems - shortcut: rbg - engine: xpath - paging: true - search_url: https://rubygems.org/search?page={pageno}&query={query} - results_xpath: /html/body/main/div/a[@class="gems__gem"] - url_xpath: ./@href - title_xpath: ./span/h2 - content_xpath: ./span/p - suggestion_xpath: /html/body/main/div/div[@class="search__suggestions"]/p/a - first_page_num: 1 - categories: [it, packages] - disabled: true - about: - website: https://rubygems.org/ - wikidata_id: Q1853420 - official_api_documentation: https://guides.rubygems.org/rubygems-org-api/ - use_official_api: false - require_api_key: false - results: HTML - - - name: peertube - engine: peertube - shortcut: ptb - paging: true - # alternatives see: https://instances.joinpeertube.org/instances - # base_url: https://tube.4aem.com - categories: videos - disabled: true - timeout: 6.0 - - - name: mediathekviewweb - engine: mediathekviewweb - shortcut: mvw - disabled: true - - - name: yacy - engine: yacy - categories: general - search_type: text - base_url: https://yacy.searchlab.eu - shortcut: ya - disabled: true - # required if you aren't using HTTPS for your local yacy instance - # https://docs.searxng.org/dev/engines/online/yacy.html - # enable_http: true - # timeout: 3.0 - # search_mode: 'global' - - - name: yacy images - engine: yacy - categories: images - search_type: image - base_url: https://yacy.searchlab.eu - shortcut: yai - disabled: true - - - name: rumble - engine: rumble - shortcut: ru - base_url: https://rumble.com/ - paging: true - categories: videos - disabled: true - - - name: livespace - engine: livespace - shortcut: ls - categories: videos - disabled: true - timeout: 5.0 - - - name: wordnik - engine: wordnik - shortcut: def - base_url: https://www.wordnik.com/ - categories: [dictionaries] - timeout: 5.0 - - - name: woxikon.de synonyme - engine: xpath - shortcut: woxi - categories: [dictionaries] - timeout: 5.0 - disabled: true - search_url: https://synonyme.woxikon.de/synonyme/{query}.php - url_xpath: //div[@class="upper-synonyms"]/a/@href - content_xpath: //div[@class="synonyms-list-group"] - title_xpath: //div[@class="upper-synonyms"]/a - no_result_for_http_status: [404] - about: - website: https://www.woxikon.de/ - wikidata_id: # No Wikidata ID - use_official_api: false - require_api_key: false - results: HTML - language: de - - - name: seekr news - engine: seekr - shortcut: senews - categories: news - seekr_category: news - disabled: true - - - name: seekr images - engine: seekr - network: seekr news - shortcut: seimg - categories: images - seekr_category: images - disabled: true - - - name: seekr videos - engine: seekr - network: seekr news - shortcut: sevid - categories: videos - seekr_category: videos - disabled: true - - - name: sjp.pwn - engine: sjp - shortcut: sjp - base_url: https://sjp.pwn.pl/ - timeout: 5.0 - disabled: true - - - name: stract - engine: stract - shortcut: str - disabled: true - - - name: svgrepo - engine: svgrepo - shortcut: svg - timeout: 10.0 - disabled: true - - - name: tootfinder - engine: tootfinder - shortcut: toot - - - name: wallhaven - engine: wallhaven - # api_key: abcdefghijklmnopqrstuvwxyz - shortcut: wh - - # wikimini: online encyclopedia for children - # The fulltext and title parameter is necessary for Wikimini because - # sometimes it will not show the results and redirect instead - - name: wikimini - engine: xpath - shortcut: wkmn - search_url: https://fr.wikimini.org/w/index.php?search={query}&title=Sp%C3%A9cial%3ASearch&fulltext=Search - url_xpath: //li/div[@class="mw-search-result-heading"]/a/@href - title_xpath: //li//div[@class="mw-search-result-heading"]/a - content_xpath: //li/div[@class="searchresult"] - categories: general - disabled: true - about: - website: https://wikimini.org/ - wikidata_id: Q3568032 - use_official_api: false - require_api_key: false - results: HTML - language: fr - - - name: wttr.in - engine: wttr - shortcut: wttr - timeout: 9.0 - - - name: yummly - engine: yummly - shortcut: yum - disabled: true - - - name: brave - engine: brave - shortcut: br - time_range_support: true - paging: true - categories: [general, web] - brave_category: search - # brave_spellcheck: true - - - name: brave.images - engine: brave - network: brave - shortcut: brimg - categories: [images, web] - brave_category: images - - - name: brave.videos - engine: brave - network: brave - shortcut: brvid - categories: [videos, web] - brave_category: videos - - - name: brave.news - engine: brave - network: brave - shortcut: brnews - categories: news - brave_category: news - - # - name: brave.goggles - # engine: brave - # network: brave - # shortcut: brgog - # time_range_support: true - # paging: true - # categories: [general, web] - # brave_category: goggles - # Goggles: # required! This should be a URL ending in .goggle - - - name: lib.rs - shortcut: lrs - engine: xpath - search_url: https://lib.rs/search?q={query} - results_xpath: /html/body/main/div/ol/li/a - url_xpath: ./@href - title_xpath: ./div[@class="h"]/h4 - content_xpath: ./div[@class="h"]/p - categories: [it, packages] - disabled: true - about: - website: https://lib.rs - wikidata_id: Q113486010 - use_official_api: false - require_api_key: false - results: HTML - - - name: sourcehut - shortcut: srht - engine: xpath - paging: true - search_url: https://sr.ht/projects?page={pageno}&search={query} - results_xpath: (//div[@class="event-list"])[1]/div[@class="event"] - url_xpath: ./h4/a[2]/@href - title_xpath: ./h4/a[2] - content_xpath: ./p - first_page_num: 1 - categories: [it, repos] - disabled: true - about: - website: https://sr.ht - wikidata_id: Q78514485 - official_api_documentation: https://man.sr.ht/ - use_official_api: false - require_api_key: false - results: HTML - - - name: goo - shortcut: goo - engine: xpath - paging: true - search_url: https://search.goo.ne.jp/web.jsp?MT={query}&FR={pageno}0 - url_xpath: //div[@class="result"]/p[@class='title fsL1']/a/@href - title_xpath: //div[@class="result"]/p[@class='title fsL1']/a - content_xpath: //p[contains(@class,'url fsM')]/following-sibling::p - first_page_num: 0 - categories: [general, web] - disabled: true - timeout: 4.0 - about: - website: https://search.goo.ne.jp - wikidata_id: Q249044 - use_official_api: false - require_api_key: false - results: HTML - language: ja - - - name: bt4g - engine: bt4g - shortcut: bt4g - - - name: pkg.go.dev - engine: xpath - shortcut: pgo - search_url: https://pkg.go.dev/search?limit=100&m=package&q={query} - results_xpath: /html/body/main/div[contains(@class,"SearchResults")]/div[not(@class)]/div[@class="SearchSnippet"] - url_xpath: ./div[@class="SearchSnippet-headerContainer"]/h2/a/@href - title_xpath: ./div[@class="SearchSnippet-headerContainer"]/h2/a - content_xpath: ./p[@class="SearchSnippet-synopsis"] - categories: [packages, it] - timeout: 3.0 - disabled: true - about: - website: https://pkg.go.dev/ - use_official_api: false - require_api_key: false - results: HTML - -# Doku engine lets you access to any Doku wiki instance: -# A public one or a privete/corporate one. -# - name: ubuntuwiki -# engine: doku -# shortcut: uw -# base_url: 'https://doc.ubuntu-fr.org' - -# Be careful when enabling this engine if you are -# running a public instance. Do not expose any sensitive -# information. You can restrict access by configuring a list -# of access tokens under tokens. -# - name: git grep -# engine: command -# command: ['git', 'grep', '{{QUERY}}'] -# shortcut: gg -# tokens: [] -# disabled: true -# delimiter: -# chars: ':' -# keys: ['filepath', 'code'] - -# Be careful when enabling this engine if you are -# running a public instance. Do not expose any sensitive -# information. You can restrict access by configuring a list -# of access tokens under tokens. -# - name: locate -# engine: command -# command: ['locate', '{{QUERY}}'] -# shortcut: loc -# tokens: [] -# disabled: true -# delimiter: -# chars: ' ' -# keys: ['line'] - -# Be careful when enabling this engine if you are -# running a public instance. Do not expose any sensitive -# information. You can restrict access by configuring a list -# of access tokens under tokens. -# - name: find -# engine: command -# command: ['find', '.', '-name', '{{QUERY}}'] -# query_type: path -# shortcut: fnd -# tokens: [] -# disabled: true -# delimiter: -# chars: ' ' -# keys: ['line'] - -# Be careful when enabling this engine if you are -# running a public instance. Do not expose any sensitive -# information. You can restrict access by configuring a list -# of access tokens under tokens. -# - name: pattern search in files -# engine: command -# command: ['fgrep', '{{QUERY}}'] -# shortcut: fgr -# tokens: [] -# disabled: true -# delimiter: -# chars: ' ' -# keys: ['line'] - -# Be careful when enabling this engine if you are -# running a public instance. Do not expose any sensitive -# information. You can restrict access by configuring a list -# of access tokens under tokens. -# - name: regex search in files -# engine: command -# command: ['grep', '{{QUERY}}'] -# shortcut: gr -# tokens: [] -# disabled: true -# delimiter: -# chars: ' ' -# keys: ['line'] - -doi_resolvers: - oadoi.org: 'https://oadoi.org/' - doi.org: 'https://doi.org/' - doai.io: 'https://dissem.in/' - sci-hub.se: 'https://sci-hub.se/' - sci-hub.st: 'https://sci-hub.st/' - sci-hub.ru: 'https://sci-hub.ru/' - -default_doi_resolver: 'oadoi.org' From 51939ff842928bfe6793a4087bfeeb8b78f719f9 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Sat, 24 Aug 2024 21:48:27 +0530 Subject: [PATCH 004/115] feat(webSearchAgent): fix typo, closes #313 --- src/agents/webSearchAgent.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/agents/webSearchAgent.ts b/src/agents/webSearchAgent.ts index c93dabb..803ae23 100644 --- a/src/agents/webSearchAgent.ts +++ b/src/agents/webSearchAgent.ts @@ -27,7 +27,7 @@ const basicSearchRetrieverPrompt = ` You will be given a conversation below and a follow up question. You need to rephrase the follow-up question if needed so it is a standalone question that can be used by the LLM to search the web for information. If it is a writing task or a simple hi, hello rather than a question, you need to return \`not_needed\` as the response. If the question contains some links and asks to answer from those links or even if they don't you need to return the links inside 'links' XML block and the question inside 'question' XML block. If there are no links then you need to return the question without any XML block. -If the user asks to summarrize the content from some links you need to return \`Summarize\` as the question inside the 'question' XML block and the links inside the 'links' XML block. +If the user asks to summarize the content from some links you need to return \`Summarize\` as the question inside the 'question' XML block and the links inside the 'links' XML block. Example: 1. Follow up question: What is the capital of France? From 8bb3e4f016cfb98698efdad9d5242e03d8a41c16 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Sun, 25 Aug 2024 12:03:32 +0530 Subject: [PATCH 005/115] feat(agents): update types --- src/agents/academicSearchAgent.ts | 2 +- src/agents/redditSearchAgent.ts | 2 +- src/agents/webSearchAgent.ts | 3 ++- src/agents/wolframAlphaSearchAgent.ts | 2 +- src/agents/writingAssistant.ts | 2 +- src/agents/youtubeSearchAgent.ts | 2 +- 6 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/agents/academicSearchAgent.ts b/src/agents/academicSearchAgent.ts index d797119..a64f9b9 100644 --- a/src/agents/academicSearchAgent.ts +++ b/src/agents/academicSearchAgent.ts @@ -66,7 +66,7 @@ const basicAcademicSearchResponsePrompt = ` const strParser = new StringOutputParser(); const handleStream = async ( - stream: AsyncGenerator<StreamEvent, any, unknown>, + stream: IterableReadableStream<StreamEvent>, emitter: eventEmitter, ) => { for await (const event of stream) { diff --git a/src/agents/redditSearchAgent.ts b/src/agents/redditSearchAgent.ts index 578e2bb..bbb4e92 100644 --- a/src/agents/redditSearchAgent.ts +++ b/src/agents/redditSearchAgent.ts @@ -66,7 +66,7 @@ const basicRedditSearchResponsePrompt = ` const strParser = new StringOutputParser(); const handleStream = async ( - stream: AsyncGenerator<StreamEvent, any, unknown>, + stream: IterableReadableStream<StreamEvent>, emitter: eventEmitter, ) => { for await (const event of stream) { diff --git a/src/agents/webSearchAgent.ts b/src/agents/webSearchAgent.ts index c93dabb..1a356c8 100644 --- a/src/agents/webSearchAgent.ts +++ b/src/agents/webSearchAgent.ts @@ -22,6 +22,7 @@ import logger from '../utils/logger'; import LineListOutputParser from '../lib/outputParsers/listLineOutputParser'; import { getDocumentsFromLinks } from '../lib/linkDocument'; import LineOutputParser from '../lib/outputParsers/lineOutputParser'; +import { IterableReadableStream } from '@langchain/core/utils/stream'; const basicSearchRetrieverPrompt = ` You will be given a conversation below and a follow up question. You need to rephrase the follow-up question if needed so it is a standalone question that can be used by the LLM to search the web for information. @@ -95,7 +96,7 @@ const basicWebSearchResponsePrompt = ` const strParser = new StringOutputParser(); const handleStream = async ( - stream: AsyncGenerator<StreamEvent, any, unknown>, + stream: IterableReadableStream<StreamEvent>, emitter: eventEmitter, ) => { for await (const event of stream) { diff --git a/src/agents/wolframAlphaSearchAgent.ts b/src/agents/wolframAlphaSearchAgent.ts index b80fcf3..07d8857 100644 --- a/src/agents/wolframAlphaSearchAgent.ts +++ b/src/agents/wolframAlphaSearchAgent.ts @@ -65,7 +65,7 @@ const basicWolframAlphaSearchResponsePrompt = ` const strParser = new StringOutputParser(); const handleStream = async ( - stream: AsyncGenerator<StreamEvent, any, unknown>, + stream: IterableReadableStream<StreamEvent>, emitter: eventEmitter, ) => { for await (const event of stream) { diff --git a/src/agents/writingAssistant.ts b/src/agents/writingAssistant.ts index 7c2cb49..5fd1f36 100644 --- a/src/agents/writingAssistant.ts +++ b/src/agents/writingAssistant.ts @@ -19,7 +19,7 @@ Since you are a writing assistant, you would not perform web searches. If you th const strParser = new StringOutputParser(); const handleStream = async ( - stream: AsyncGenerator<StreamEvent, any, unknown>, + stream: IterableReadableStream<StreamEvent>, emitter: eventEmitter, ) => { for await (const event of stream) { diff --git a/src/agents/youtubeSearchAgent.ts b/src/agents/youtubeSearchAgent.ts index 4133157..b0da25b 100644 --- a/src/agents/youtubeSearchAgent.ts +++ b/src/agents/youtubeSearchAgent.ts @@ -66,7 +66,7 @@ const basicYoutubeSearchResponsePrompt = ` const strParser = new StringOutputParser(); const handleStream = async ( - stream: AsyncGenerator<StreamEvent, any, unknown>, + stream: IterableReadableStream<StreamEvent>, emitter: eventEmitter, ) => { for await (const event of stream) { From c521b032a7dbbd841e86db1d6ffd6cd33e87a15d Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Sun, 25 Aug 2024 15:08:30 +0530 Subject: [PATCH 006/115] feat(agents): fix unresloved types --- src/agents/academicSearchAgent.ts | 1 + src/agents/redditSearchAgent.ts | 1 + src/agents/webSearchAgent.ts | 2 +- src/agents/wolframAlphaSearchAgent.ts | 1 + src/agents/writingAssistant.ts | 1 + src/agents/youtubeSearchAgent.ts | 1 + 6 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/agents/academicSearchAgent.ts b/src/agents/academicSearchAgent.ts index a64f9b9..a72e3a2 100644 --- a/src/agents/academicSearchAgent.ts +++ b/src/agents/academicSearchAgent.ts @@ -19,6 +19,7 @@ import formatChatHistoryAsString from '../utils/formatHistory'; import eventEmitter from 'events'; import computeSimilarity from '../utils/computeSimilarity'; import logger from '../utils/logger'; +import { IterableReadableStream } from '@langchain/core/utils/stream'; const basicAcademicSearchRetrieverPrompt = ` You will be given a conversation below and a follow up question. You need to rephrase the follow-up question if needed so it is a standalone question that can be used by the LLM to search the web for information. diff --git a/src/agents/redditSearchAgent.ts b/src/agents/redditSearchAgent.ts index bbb4e92..9c2c443 100644 --- a/src/agents/redditSearchAgent.ts +++ b/src/agents/redditSearchAgent.ts @@ -19,6 +19,7 @@ import formatChatHistoryAsString from '../utils/formatHistory'; import eventEmitter from 'events'; import computeSimilarity from '../utils/computeSimilarity'; import logger from '../utils/logger'; +import { IterableReadableStream } from '@langchain/core/utils/stream'; const basicRedditSearchRetrieverPrompt = ` You will be given a conversation below and a follow up question. You need to rephrase the follow-up question if needed so it is a standalone question that can be used by the LLM to search the web for information. diff --git a/src/agents/webSearchAgent.ts b/src/agents/webSearchAgent.ts index 9c0d97f..f7a6d7e 100644 --- a/src/agents/webSearchAgent.ts +++ b/src/agents/webSearchAgent.ts @@ -96,7 +96,7 @@ const basicWebSearchResponsePrompt = ` const strParser = new StringOutputParser(); const handleStream = async ( - stream: IterableReadableStream<StreamEvent>, + stream: IterableReadableStream<StreamEvent>, emitter: eventEmitter, ) => { for await (const event of stream) { diff --git a/src/agents/wolframAlphaSearchAgent.ts b/src/agents/wolframAlphaSearchAgent.ts index 07d8857..1de8d0f 100644 --- a/src/agents/wolframAlphaSearchAgent.ts +++ b/src/agents/wolframAlphaSearchAgent.ts @@ -18,6 +18,7 @@ import type { Embeddings } from '@langchain/core/embeddings'; import formatChatHistoryAsString from '../utils/formatHistory'; import eventEmitter from 'events'; import logger from '../utils/logger'; +import { IterableReadableStream } from '@langchain/core/utils/stream'; const basicWolframAlphaSearchRetrieverPrompt = ` You will be given a conversation below and a follow up question. You need to rephrase the follow-up question if needed so it is a standalone question that can be used by the LLM to search the web for information. diff --git a/src/agents/writingAssistant.ts b/src/agents/writingAssistant.ts index 5fd1f36..7e275df 100644 --- a/src/agents/writingAssistant.ts +++ b/src/agents/writingAssistant.ts @@ -10,6 +10,7 @@ import eventEmitter from 'events'; import type { BaseChatModel } from '@langchain/core/language_models/chat_models'; import type { Embeddings } from '@langchain/core/embeddings'; import logger from '../utils/logger'; +import { IterableReadableStream } from '@langchain/core/utils/stream'; const writingAssistantPrompt = ` You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are currently set on focus mode 'Writing Assistant', this means you will be helping the user write a response to a given query. diff --git a/src/agents/youtubeSearchAgent.ts b/src/agents/youtubeSearchAgent.ts index b0da25b..e9b6553 100644 --- a/src/agents/youtubeSearchAgent.ts +++ b/src/agents/youtubeSearchAgent.ts @@ -19,6 +19,7 @@ import formatChatHistoryAsString from '../utils/formatHistory'; import eventEmitter from 'events'; import computeSimilarity from '../utils/computeSimilarity'; import logger from '../utils/logger'; +import { IterableReadableStream } from '@langchain/core/utils/stream'; const basicYoutubeSearchRetrieverPrompt = ` You will be given a conversation below and a follow up question. You need to rephrase the follow-up question if needed so it is a standalone question that can be used by the LLM to search the web for information. From ff34d1043fd3501f15e1e1ab2425b022c917911e Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Sun, 25 Aug 2024 15:08:47 +0530 Subject: [PATCH 007/115] feat(app): lint & format --- ui/components/ChatWindow.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index 5e6d382..0ace2dd 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -59,7 +59,9 @@ const useSocket = ( chatModelProvider = Object.keys(chatModelProviders)[0]; if (chatModelProvider === 'custom_openai') { - toast.error('Seems like you are using the custom OpenAI provider, please open the settings and configure the API key and base URL'); + toast.error( + 'Seems like you are using the custom OpenAI provider, please open the settings and configure the API key and base URL', + ); setError(true); return; } else { @@ -192,7 +194,7 @@ const useSocket = ( if (data.type === 'error') { toast.error(data.data); } - }) + }); setWs(ws); }; From 806c47e70592356193bacc487f6fe0b148e84337 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 28 Aug 2024 09:53:06 +0530 Subject: [PATCH 008/115] feat(chatwindow): fix infinite loading --- ui/components/ChatWindow.tsx | 7 ------- 1 file changed, 7 deletions(-) diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index 0ace2dd..cc93da8 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -201,13 +201,6 @@ const useSocket = ( connectWs(); } - - return () => { - if (ws?.readyState === 1) { - ws?.close(); - console.log('[DEBUG] closed'); - } - }; }, [ws, url, setIsWSReady, setError]); return ws; From 2873093fee1fbb7b473b4ab2c1f3e1d7116d95ee Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 28 Aug 2024 10:00:05 +0530 Subject: [PATCH 009/115] feat(package): bump version --- package.json | 2 +- ui/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index db3d773..c09454c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "perplexica-backend", - "version": "1.9.0-rc1", + "version": "1.9.0-rc2", "license": "MIT", "author": "ItzCrazyKns", "scripts": { diff --git a/ui/package.json b/ui/package.json index 1d892de..23afda2 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,6 +1,6 @@ { "name": "perplexica-frontend", - "version": "1.9.0-rc1", + "version": "1.9.0-rc2", "license": "MIT", "author": "ItzCrazyKns", "scripts": { From e8ed4df31aaac4001192f64a66701c48bc6e9378 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 28 Aug 2024 14:27:22 +0530 Subject: [PATCH 010/115] feat(chat-window): close socket on unmount --- ui/components/ChatWindow.tsx | 410 ++++++++++++++++++----------------- 1 file changed, 208 insertions(+), 202 deletions(-) diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index cc93da8..9a1fe3c 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -1,42 +1,42 @@ -'use client'; +'use client' -import { useEffect, useRef, useState } from 'react'; -import { Document } from '@langchain/core/documents'; -import Navbar from './Navbar'; -import Chat from './Chat'; -import EmptyChat from './EmptyChat'; -import crypto from 'crypto'; -import { toast } from 'sonner'; -import { useSearchParams } from 'next/navigation'; -import { getSuggestions } from '@/lib/actions'; -import Error from 'next/error'; +import { useEffect, useRef, useState } from 'react' +import { Document } from '@langchain/core/documents' +import Navbar from './Navbar' +import Chat from './Chat' +import EmptyChat from './EmptyChat' +import crypto from 'crypto' +import { toast } from 'sonner' +import { useSearchParams } from 'next/navigation' +import { getSuggestions } from '@/lib/actions' +import Error from 'next/error' export type Message = { - messageId: string; - chatId: string; - createdAt: Date; - content: string; - role: 'user' | 'assistant'; - suggestions?: string[]; - sources?: Document[]; -}; + messageId: string + chatId: string + createdAt: Date + content: string + role: 'user' | 'assistant' + suggestions?: string[] + sources?: Document[] +} const useSocket = ( url: string, setIsWSReady: (ready: boolean) => void, setError: (error: boolean) => void, ) => { - const [ws, setWs] = useState<WebSocket | null>(null); + const [ws, setWs] = useState<WebSocket | null>(null) useEffect(() => { if (!ws) { const connectWs = async () => { - let chatModel = localStorage.getItem('chatModel'); - let chatModelProvider = localStorage.getItem('chatModelProvider'); - let embeddingModel = localStorage.getItem('embeddingModel'); + let chatModel = localStorage.getItem('chatModel') + let chatModelProvider = localStorage.getItem('chatModelProvider') + let embeddingModel = localStorage.getItem('embeddingModel') let embeddingModelProvider = localStorage.getItem( 'embeddingModelProvider', - ); + ) const providers = await fetch( `${process.env.NEXT_PUBLIC_API_URL}/models`, @@ -45,7 +45,7 @@ const useSocket = ( 'Content-Type': 'application/json', }, }, - ).then(async (res) => await res.json()); + ).then(async res => await res.json()) if ( !chatModel || @@ -54,58 +54,55 @@ const useSocket = ( !embeddingModelProvider ) { if (!chatModel || !chatModelProvider) { - const chatModelProviders = providers.chatModelProviders; + const chatModelProviders = providers.chatModelProviders - chatModelProvider = Object.keys(chatModelProviders)[0]; + chatModelProvider = Object.keys(chatModelProviders)[0] if (chatModelProvider === 'custom_openai') { toast.error( 'Seems like you are using the custom OpenAI provider, please open the settings and configure the API key and base URL', - ); - setError(true); - return; + ) + setError(true) + return } else { - chatModel = Object.keys(chatModelProviders[chatModelProvider])[0]; + chatModel = Object.keys(chatModelProviders[chatModelProvider])[0] if ( !chatModelProviders || Object.keys(chatModelProviders).length === 0 ) - return toast.error('No chat models available'); + return toast.error('No chat models available') } } if (!embeddingModel || !embeddingModelProvider) { - const embeddingModelProviders = providers.embeddingModelProviders; + const embeddingModelProviders = providers.embeddingModelProviders if ( !embeddingModelProviders || Object.keys(embeddingModelProviders).length === 0 ) - return toast.error('No embedding models available'); + return toast.error('No embedding models available') - embeddingModelProvider = Object.keys(embeddingModelProviders)[0]; + embeddingModelProvider = Object.keys(embeddingModelProviders)[0] embeddingModel = Object.keys( embeddingModelProviders[embeddingModelProvider], - )[0]; + )[0] } - localStorage.setItem('chatModel', chatModel!); - localStorage.setItem('chatModelProvider', chatModelProvider); - localStorage.setItem('embeddingModel', embeddingModel!); - localStorage.setItem( - 'embeddingModelProvider', - embeddingModelProvider, - ); + localStorage.setItem('chatModel', chatModel!) + localStorage.setItem('chatModelProvider', chatModelProvider) + localStorage.setItem('embeddingModel', embeddingModel!) + localStorage.setItem('embeddingModelProvider', embeddingModelProvider) } else { - const chatModelProviders = providers.chatModelProviders; - const embeddingModelProviders = providers.embeddingModelProviders; + const chatModelProviders = providers.chatModelProviders + const embeddingModelProviders = providers.embeddingModelProviders if ( Object.keys(chatModelProviders).length > 0 && !chatModelProviders[chatModelProvider] ) { - chatModelProvider = Object.keys(chatModelProviders)[0]; - localStorage.setItem('chatModelProvider', chatModelProvider); + chatModelProvider = Object.keys(chatModelProviders)[0] + localStorage.setItem('chatModelProvider', chatModelProvider) } if ( @@ -113,19 +110,19 @@ const useSocket = ( chatModelProvider != 'custom_openai' && !chatModelProviders[chatModelProvider][chatModel] ) { - chatModel = Object.keys(chatModelProviders[chatModelProvider])[0]; - localStorage.setItem('chatModel', chatModel); + chatModel = Object.keys(chatModelProviders[chatModelProvider])[0] + localStorage.setItem('chatModel', chatModel) } if ( Object.keys(embeddingModelProviders).length > 0 && !embeddingModelProviders[embeddingModelProvider] ) { - embeddingModelProvider = Object.keys(embeddingModelProviders)[0]; + embeddingModelProvider = Object.keys(embeddingModelProviders)[0] localStorage.setItem( 'embeddingModelProvider', embeddingModelProvider, - ); + ) } if ( @@ -134,77 +131,77 @@ const useSocket = ( ) { embeddingModel = Object.keys( embeddingModelProviders[embeddingModelProvider], - )[0]; - localStorage.setItem('embeddingModel', embeddingModel); + )[0] + localStorage.setItem('embeddingModel', embeddingModel) } } - const wsURL = new URL(url); - const searchParams = new URLSearchParams({}); + const wsURL = new URL(url) + const searchParams = new URLSearchParams({}) - searchParams.append('chatModel', chatModel!); - searchParams.append('chatModelProvider', chatModelProvider); + searchParams.append('chatModel', chatModel!) + searchParams.append('chatModelProvider', chatModelProvider) if (chatModelProvider === 'custom_openai') { searchParams.append( 'openAIApiKey', localStorage.getItem('openAIApiKey')!, - ); + ) searchParams.append( 'openAIBaseURL', localStorage.getItem('openAIBaseURL')!, - ); + ) } - searchParams.append('embeddingModel', embeddingModel!); - searchParams.append('embeddingModelProvider', embeddingModelProvider); + searchParams.append('embeddingModel', embeddingModel!) + searchParams.append('embeddingModelProvider', embeddingModelProvider) - wsURL.search = searchParams.toString(); + wsURL.search = searchParams.toString() - const ws = new WebSocket(wsURL.toString()); + const ws = new WebSocket(wsURL.toString()) const timeoutId = setTimeout(() => { if (ws.readyState !== 1) { toast.error( 'Failed to connect to the server. Please try again later.', - ); + ) } - }, 10000); + }, 10000) ws.onopen = () => { - console.log('[DEBUG] open'); - clearTimeout(timeoutId); - setIsWSReady(true); - }; + console.log('[DEBUG] open') + clearTimeout(timeoutId) + setIsWSReady(true) + } ws.onerror = () => { - clearTimeout(timeoutId); - setError(true); - toast.error('WebSocket connection error.'); - }; + clearTimeout(timeoutId) + setError(true) + toast.error('WebSocket connection error.') + } ws.onclose = () => { - clearTimeout(timeoutId); - setError(true); - console.log('[DEBUG] closed'); - }; + clearTimeout(timeoutId) + setError(true) + console.log('[DEBUG] closed') + } - ws.addEventListener('message', (e) => { - const data = JSON.parse(e.data); + ws.addEventListener('message', e => { + const data = JSON.parse(e.data) if (data.type === 'error') { - toast.error(data.data); + toast.error(data.data) } - }); + }) - setWs(ws); - }; + setWs(ws) + } - connectWs(); + connectWs() } - }, [ws, url, setIsWSReady, setError]); + }, [ws, url, setIsWSReady, setError]) - return ws; -}; + return ws +} const loadMessages = async ( chatId: string, @@ -222,66 +219,66 @@ const loadMessages = async ( 'Content-Type': 'application/json', }, }, - ); + ) if (res.status === 404) { - setNotFound(true); - setIsMessagesLoaded(true); - return; + setNotFound(true) + setIsMessagesLoaded(true) + return } - const data = await res.json(); + const data = await res.json() const messages = data.messages.map((msg: any) => { return { ...msg, ...JSON.parse(msg.metadata), - }; - }) as Message[]; + } + }) as Message[] - setMessages(messages); + setMessages(messages) - const history = messages.map((msg) => { - return [msg.role, msg.content]; - }) as [string, string][]; + const history = messages.map(msg => { + return [msg.role, msg.content] + }) as [string, string][] - console.log('[DEBUG] messages loaded'); + console.log('[DEBUG] messages loaded') - document.title = messages[0].content; + document.title = messages[0].content - setChatHistory(history); - setFocusMode(data.chat.focusMode); - setIsMessagesLoaded(true); -}; + setChatHistory(history) + setFocusMode(data.chat.focusMode) + setIsMessagesLoaded(true) +} const ChatWindow = ({ id }: { id?: string }) => { - const searchParams = useSearchParams(); - const initialMessage = searchParams.get('q'); + const searchParams = useSearchParams() + const initialMessage = searchParams.get('q') - const [chatId, setChatId] = useState<string | undefined>(id); - const [newChatCreated, setNewChatCreated] = useState(false); + const [chatId, setChatId] = useState<string | undefined>(id) + const [newChatCreated, setNewChatCreated] = useState(false) - const [hasError, setHasError] = useState(false); - const [isReady, setIsReady] = useState(false); + const [hasError, setHasError] = useState(false) + const [isReady, setIsReady] = useState(false) - const [isWSReady, setIsWSReady] = useState(false); + const [isWSReady, setIsWSReady] = useState(false) const ws = useSocket( process.env.NEXT_PUBLIC_WS_URL!, setIsWSReady, setHasError, - ); + ) - const [loading, setLoading] = useState(false); - const [messageAppeared, setMessageAppeared] = useState(false); + const [loading, setLoading] = useState(false) + const [messageAppeared, setMessageAppeared] = useState(false) - const [chatHistory, setChatHistory] = useState<[string, string][]>([]); - const [messages, setMessages] = useState<Message[]>([]); + const [chatHistory, setChatHistory] = useState<[string, string][]>([]) + const [messages, setMessages] = useState<Message[]>([]) - const [focusMode, setFocusMode] = useState('webSearch'); + const [focusMode, setFocusMode] = useState('webSearch') - const [isMessagesLoaded, setIsMessagesLoaded] = useState(false); + const [isMessagesLoaded, setIsMessagesLoaded] = useState(false) - const [notFound, setNotFound] = useState(false); + const [notFound, setNotFound] = useState(false) useEffect(() => { if ( @@ -297,37 +294,46 @@ const ChatWindow = ({ id }: { id?: string }) => { setChatHistory, setFocusMode, setNotFound, - ); + ) } else if (!chatId) { - setNewChatCreated(true); - setIsMessagesLoaded(true); - setChatId(crypto.randomBytes(20).toString('hex')); + setNewChatCreated(true) + setIsMessagesLoaded(true) + setChatId(crypto.randomBytes(20).toString('hex')) } // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - const messagesRef = useRef<Message[]>([]); + }, []) useEffect(() => { - messagesRef.current = messages; - }, [messages]); + return () => { + if (ws?.readyState === 1) { + ws.close() + console.log('[DEBUG] closed') + } + } + }, []) + + const messagesRef = useRef<Message[]>([]) + + useEffect(() => { + messagesRef.current = messages + }, [messages]) useEffect(() => { if (isMessagesLoaded && isWSReady) { - setIsReady(true); + setIsReady(true) } - }, [isMessagesLoaded, isWSReady]); + }, [isMessagesLoaded, isWSReady]) const sendMessage = async (message: string) => { - if (loading) return; - setLoading(true); - setMessageAppeared(false); + if (loading) return + setLoading(true) + setMessageAppeared(false) - let sources: Document[] | undefined = undefined; - let recievedMessage = ''; - let added = false; + let sources: Document[] | undefined = undefined + let recievedMessage = '' + let added = false - const messageId = crypto.randomBytes(7).toString('hex'); + const messageId = crypto.randomBytes(7).toString('hex') ws?.send( JSON.stringify({ @@ -339,9 +345,9 @@ const ChatWindow = ({ id }: { id?: string }) => { focusMode: focusMode, history: [...chatHistory, ['human', message]], }), - ); + ) - setMessages((prevMessages) => [ + setMessages(prevMessages => [ ...prevMessages, { content: message, @@ -350,21 +356,21 @@ const ChatWindow = ({ id }: { id?: string }) => { role: 'user', createdAt: new Date(), }, - ]); + ]) const messageHandler = async (e: MessageEvent) => { - const data = JSON.parse(e.data); + const data = JSON.parse(e.data) if (data.type === 'error') { - toast.error(data.data); - setLoading(false); - return; + toast.error(data.data) + setLoading(false) + return } if (data.type === 'sources') { - sources = data.data; + sources = data.data if (!added) { - setMessages((prevMessages) => [ + setMessages(prevMessages => [ ...prevMessages, { content: '', @@ -374,15 +380,15 @@ const ChatWindow = ({ id }: { id?: string }) => { sources: sources, createdAt: new Date(), }, - ]); - added = true; + ]) + added = true } - setMessageAppeared(true); + setMessageAppeared(true) } if (data.type === 'message') { if (!added) { - setMessages((prevMessages) => [ + setMessages(prevMessages => [ ...prevMessages, { content: data.data, @@ -392,35 +398,35 @@ const ChatWindow = ({ id }: { id?: string }) => { sources: sources, createdAt: new Date(), }, - ]); - added = true; + ]) + added = true } - setMessages((prev) => - prev.map((message) => { + setMessages(prev => + prev.map(message => { if (message.messageId === data.messageId) { - return { ...message, content: message.content + data.data }; + return { ...message, content: message.content + data.data } } - return message; + return message }), - ); + ) - recievedMessage += data.data; - setMessageAppeared(true); + recievedMessage += data.data + setMessageAppeared(true) } if (data.type === 'messageEnd') { - setChatHistory((prevHistory) => [ + setChatHistory(prevHistory => [ ...prevHistory, ['human', message], ['assistant', recievedMessage], - ]); + ]) - ws?.removeEventListener('message', messageHandler); - setLoading(false); + ws?.removeEventListener('message', messageHandler) + setLoading(false) - const lastMsg = messagesRef.current[messagesRef.current.length - 1]; + const lastMsg = messagesRef.current[messagesRef.current.length - 1] if ( lastMsg.role === 'assistant' && @@ -428,54 +434,54 @@ const ChatWindow = ({ id }: { id?: string }) => { lastMsg.sources.length > 0 && !lastMsg.suggestions ) { - const suggestions = await getSuggestions(messagesRef.current); - setMessages((prev) => - prev.map((msg) => { + const suggestions = await getSuggestions(messagesRef.current) + setMessages(prev => + prev.map(msg => { if (msg.messageId === lastMsg.messageId) { - return { ...msg, suggestions: suggestions }; + return { ...msg, suggestions: suggestions } } - return msg; + return msg }), - ); + ) } } - }; + } - ws?.addEventListener('message', messageHandler); - }; + ws?.addEventListener('message', messageHandler) + } const rewrite = (messageId: string) => { - const index = messages.findIndex((msg) => msg.messageId === messageId); + const index = messages.findIndex(msg => msg.messageId === messageId) - if (index === -1) return; + if (index === -1) return - const message = messages[index - 1]; + const message = messages[index - 1] - setMessages((prev) => { - return [...prev.slice(0, messages.length > 2 ? index - 1 : 0)]; - }); - setChatHistory((prev) => { - return [...prev.slice(0, messages.length > 2 ? index - 1 : 0)]; - }); + setMessages(prev => { + return [...prev.slice(0, messages.length > 2 ? index - 1 : 0)] + }) + setChatHistory(prev => { + return [...prev.slice(0, messages.length > 2 ? index - 1 : 0)] + }) - sendMessage(message.content); - }; + sendMessage(message.content) + } useEffect(() => { if (isReady && initialMessage) { - sendMessage(initialMessage); + sendMessage(initialMessage) } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [isReady, initialMessage]); + }, [isReady, initialMessage]) if (hasError) { return ( - <div className="flex flex-col items-center justify-center min-h-screen"> - <p className="dark:text-white/70 text-black/70 text-sm"> + <div className='flex flex-col items-center justify-center min-h-screen'> + <p className='dark:text-white/70 text-black/70 text-sm'> Failed to connect to the server. Please try again later. </p> </div> - ); + ) } return isReady ? ( @@ -504,25 +510,25 @@ const ChatWindow = ({ id }: { id?: string }) => { </div> ) ) : ( - <div className="flex flex-row items-center justify-center min-h-screen"> + <div className='flex flex-row items-center justify-center min-h-screen'> <svg - aria-hidden="true" - className="w-8 h-8 text-light-200 fill-light-secondary dark:text-[#202020] animate-spin dark:fill-[#ffffff3b]" - viewBox="0 0 100 101" - fill="none" - xmlns="http://www.w3.org/2000/svg" + aria-hidden='true' + className='w-8 h-8 text-light-200 fill-light-secondary dark:text-[#202020] animate-spin dark:fill-[#ffffff3b]' + viewBox='0 0 100 101' + fill='none' + xmlns='http://www.w3.org/2000/svg' > <path - d="M100 50.5908C100.003 78.2051 78.1951 100.003 50.5908 100C22.9765 99.9972 0.997224 78.018 1 50.4037C1.00281 22.7993 22.8108 0.997224 50.4251 1C78.0395 1.00281 100.018 22.8108 100 50.4251ZM9.08164 50.594C9.06312 73.3997 27.7909 92.1272 50.5966 92.1457C73.4023 92.1642 92.1298 73.4365 92.1483 50.6308C92.1669 27.8251 73.4392 9.0973 50.6335 9.07878C27.8278 9.06026 9.10003 27.787 9.08164 50.594Z" - fill="currentColor" + d='M100 50.5908C100.003 78.2051 78.1951 100.003 50.5908 100C22.9765 99.9972 0.997224 78.018 1 50.4037C1.00281 22.7993 22.8108 0.997224 50.4251 1C78.0395 1.00281 100.018 22.8108 100 50.4251ZM9.08164 50.594C9.06312 73.3997 27.7909 92.1272 50.5966 92.1457C73.4023 92.1642 92.1298 73.4365 92.1483 50.6308C92.1669 27.8251 73.4392 9.0973 50.6335 9.07878C27.8278 9.06026 9.10003 27.787 9.08164 50.594Z' + fill='currentColor' /> <path - d="M93.9676 39.0409C96.393 38.4037 97.8624 35.9116 96.9801 33.5533C95.1945 28.8227 92.871 24.3692 90.0681 20.348C85.6237 14.1775 79.4473 9.36872 72.0454 6.45794C64.6435 3.54717 56.3134 2.65431 48.3133 3.89319C45.869 4.27179 44.3768 6.77534 45.014 9.20079C45.6512 11.6262 48.1343 13.0956 50.5786 12.717C56.5073 11.8281 62.5542 12.5399 68.0406 14.7911C73.527 17.0422 78.2187 20.7487 81.5841 25.4923C83.7976 28.5886 85.4467 32.059 86.4416 35.7474C87.1273 38.1189 89.5423 39.6781 91.9676 39.0409Z" - fill="currentFill" + d='M93.9676 39.0409C96.393 38.4037 97.8624 35.9116 96.9801 33.5533C95.1945 28.8227 92.871 24.3692 90.0681 20.348C85.6237 14.1775 79.4473 9.36872 72.0454 6.45794C64.6435 3.54717 56.3134 2.65431 48.3133 3.89319C45.869 4.27179 44.3768 6.77534 45.014 9.20079C45.6512 11.6262 48.1343 13.0956 50.5786 12.717C56.5073 11.8281 62.5542 12.5399 68.0406 14.7911C73.527 17.0422 78.2187 20.7487 81.5841 25.4923C83.7976 28.5886 85.4467 32.059 86.4416 35.7474C87.1273 38.1189 89.5423 39.6781 91.9676 39.0409Z' + fill='currentFill' /> </svg> </div> - ); -}; + ) +} -export default ChatWindow; +export default ChatWindow From f620252406f828c67555d9393fe3c6a49440e42f Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 29 Aug 2024 16:51:12 +0530 Subject: [PATCH 011/115] feat(linkDocument): add error handling --- src/lib/linkDocument.ts | 98 ++++++++++++++++++++++++----------------- 1 file changed, 57 insertions(+), 41 deletions(-) diff --git a/src/lib/linkDocument.ts b/src/lib/linkDocument.ts index 9607220..5e90571 100644 --- a/src/lib/linkDocument.ts +++ b/src/lib/linkDocument.ts @@ -3,6 +3,7 @@ import { htmlToText } from 'html-to-text'; import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; import { Document } from '@langchain/core/documents'; import pdfParse from 'pdf-parse'; +import logger from '../utils/logger'; export const getDocumentsFromLinks = async ({ links }: { links: string[] }) => { const splitter = new RecursiveCharacterTextSplitter(); @@ -16,66 +17,81 @@ export const getDocumentsFromLinks = async ({ links }: { links: string[] }) => { ? link : `https://${link}`; - const res = await axios.get(link, { - responseType: 'arraybuffer', - }); + try { + const res = await axios.get(link, { + responseType: 'arraybuffer', + }); - const isPdf = res.headers['content-type'] === 'application/pdf'; + const isPdf = res.headers['content-type'] === 'application/pdf'; - if (isPdf) { - const pdfText = await pdfParse(res.data); - const parsedText = pdfText.text + if (isPdf) { + const pdfText = await pdfParse(res.data); + const parsedText = pdfText.text + .replace(/(\r\n|\n|\r)/gm, ' ') + .replace(/\s+/g, ' ') + .trim(); + + const splittedText = await splitter.splitText(parsedText); + const title = 'PDF Document'; + + const linkDocs = splittedText.map((text) => { + return new Document({ + pageContent: text, + metadata: { + title: title, + url: link, + }, + }); + }); + + docs.push(...linkDocs); + return; + } + + const parsedText = htmlToText(res.data.toString('utf8'), { + selectors: [ + { + selector: 'a', + options: { + ignoreHref: true, + }, + }, + ], + }) .replace(/(\r\n|\n|\r)/gm, ' ') .replace(/\s+/g, ' ') .trim(); const splittedText = await splitter.splitText(parsedText); - const title = 'PDF Document'; + const title = res.data + .toString('utf8') + .match(/<title>(.*?)<\/title>/)?.[1]; const linkDocs = splittedText.map((text) => { return new Document({ pageContent: text, metadata: { - title: title, + title: title || link, url: link, }, }); }); docs.push(...linkDocs); - return; - } - - const parsedText = htmlToText(res.data.toString('utf8'), { - selectors: [ - { - selector: 'a', - options: { - ignoreHref: true, + } catch (err) { + logger.error( + `Error at generating documents from links: ${err.message}`, + ); + docs.push( + new Document({ + pageContent: `Failed to retrieve content from the link: ${err.message}`, + metadata: { + title: 'Failed to retrieve content', + url: link, }, - }, - ], - }) - .replace(/(\r\n|\n|\r)/gm, ' ') - .replace(/\s+/g, ' ') - .trim(); - - const splittedText = await splitter.splitText(parsedText); - const title = res.data - .toString('utf8') - .match(/<title>(.*?)<\/title>/)?.[1]; - - const linkDocs = splittedText.map((text) => { - return new Document({ - pageContent: text, - metadata: { - title: title || link, - url: link, - }, - }); - }); - - docs.push(...linkDocs); + }), + ); + } }), ); From 449684c4192105ef39dcfe74dc0bc053780c4e15 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 29 Aug 2024 16:51:42 +0530 Subject: [PATCH 012/115] feat(webSearchAgent): update retriever prompt & change temp --- src/agents/webSearchAgent.ts | 59 ++++++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 19 deletions(-) diff --git a/src/agents/webSearchAgent.ts b/src/agents/webSearchAgent.ts index f7a6d7e..159023e 100644 --- a/src/agents/webSearchAgent.ts +++ b/src/agents/webSearchAgent.ts @@ -23,22 +23,37 @@ import LineListOutputParser from '../lib/outputParsers/listLineOutputParser'; import { getDocumentsFromLinks } from '../lib/linkDocument'; import LineOutputParser from '../lib/outputParsers/lineOutputParser'; import { IterableReadableStream } from '@langchain/core/utils/stream'; +import { ChatOpenAI } from '@langchain/openai'; const basicSearchRetrieverPrompt = ` -You will be given a conversation below and a follow up question. You need to rephrase the follow-up question if needed so it is a standalone question that can be used by the LLM to search the web for information. -If it is a writing task or a simple hi, hello rather than a question, you need to return \`not_needed\` as the response. -If the question contains some links and asks to answer from those links or even if they don't you need to return the links inside 'links' XML block and the question inside 'question' XML block. If there are no links then you need to return the question without any XML block. -If the user asks to summarize the content from some links you need to return \`Summarize\` as the question inside the 'question' XML block and the links inside the 'links' XML block. +You are an AI question rephraser. You will be given a conversation and a follow-up question, you will have to rephrase the follow up question so it is a standalone question and can be used by another LLM to search the web for information to answer it. +If it is a smple writing task or a greeting (unless the greeting contains a question after it) like Hi, Hello, How are you, etc. than a question then you need to return \`not_needed\` as the response (This is because the LLM won't need to search the web for finding information on this topic). +If the user asks some question from some URL or wants you to summarize a PDF or a webpage (via URL) you need to return the links inside the \`links\` XML block and the question inside the \`question\` XML block. If the user wants to you to summarize the webpage or the PDF you need to return \`summarize\` inside the \`question\` XML block in place of a question and the link to summarize in the \`links\` XML block. +You must always return the rephrased question inside the \`question\` XML block, if there are no links in the follow-up question then don't insert a \`links\` XML block in your response. -Example: -1. Follow up question: What is the capital of France? -Rephrased question: \`Capital of france\` +There are several examples attached for your reference inside the below \`examples\` XML block -2. Follow up question: What is the population of New York City? -Rephrased question: \`Population of New York City\` +<examples> +1. Follow up question: What is the capital of France +Rephrased question:\` +<question> +Capital of france +</question> +\` + +2. Hi, how are you? +Rephrased question\` +<question> +not_needed +</question> +\` 3. Follow up question: What is Docker? -Rephrased question: \`What is Docker\` +Rephrased question: \` +<question> +What is Docker +</question> +\` 4. Follow up question: Can you tell me what is X from https://example.com Rephrased question: \` @@ -54,16 +69,20 @@ https://example.com 5. Follow up question: Summarize the content from https://example.com Rephrased question: \` <question> -Summarize +summarize </question> <links> https://example.com </links> \` +</examples> -Conversation: +Anything below is the part of the actual conversation and you need to use conversation and the follow-up question to rephrase the follow-up question as a standalone question based on the guidelines shared above. + +<conversation> {chat_history} +</conversation> Follow up question: {query} Rephrased question: @@ -133,15 +152,13 @@ type BasicChainInput = { }; const createBasicWebSearchRetrieverChain = (llm: BaseChatModel) => { + (llm as unknown as ChatOpenAI).temperature = 0; + return RunnableSequence.from([ PromptTemplate.fromTemplate(basicSearchRetrieverPrompt), llm, strParser, RunnableLambda.from(async (input: string) => { - if (input === 'not_needed') { - return { query: '', docs: [] }; - } - const linksOutputParser = new LineListOutputParser({ key: 'links', }); @@ -153,9 +170,13 @@ const createBasicWebSearchRetrieverChain = (llm: BaseChatModel) => { const links = await linksOutputParser.parse(input); let question = await questionOutputParser.parse(input); + if (question === 'not_needed') { + return { query: '', docs: [] }; + } + if (links.length > 0) { if (question.length === 0) { - question = 'Summarize'; + question = 'summarize'; } let docs = []; @@ -272,7 +293,7 @@ const createBasicWebSearchAnsweringChain = ( return docs; } - if (query === 'Summarize') { + if (query.toLocaleLowerCase() === 'summarize') { return docs; } @@ -295,7 +316,7 @@ const createBasicWebSearchAnsweringChain = ( }); const sortedDocs = similarity - .filter((sim) => sim.similarity > 0.5) + .filter((sim) => sim.similarity > 0.3) .sort((a, b) => b.similarity - a.similarity) .slice(0, 15) .map((sim) => docsWithContent[sim.index]); From c952469f087c9d0577d9421308eaaf2d1d9217a7 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 29 Aug 2024 16:51:59 +0530 Subject: [PATCH 013/115] feat(chaWindow): lint & beautify --- ui/components/ChatWindow.tsx | 407 ++++++++++++++++++----------------- 1 file changed, 205 insertions(+), 202 deletions(-) diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index 9a1fe3c..b3d0089 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -1,42 +1,42 @@ -'use client' +'use client'; -import { useEffect, useRef, useState } from 'react' -import { Document } from '@langchain/core/documents' -import Navbar from './Navbar' -import Chat from './Chat' -import EmptyChat from './EmptyChat' -import crypto from 'crypto' -import { toast } from 'sonner' -import { useSearchParams } from 'next/navigation' -import { getSuggestions } from '@/lib/actions' -import Error from 'next/error' +import { useEffect, useRef, useState } from 'react'; +import { Document } from '@langchain/core/documents'; +import Navbar from './Navbar'; +import Chat from './Chat'; +import EmptyChat from './EmptyChat'; +import crypto from 'crypto'; +import { toast } from 'sonner'; +import { useSearchParams } from 'next/navigation'; +import { getSuggestions } from '@/lib/actions'; +import Error from 'next/error'; export type Message = { - messageId: string - chatId: string - createdAt: Date - content: string - role: 'user' | 'assistant' - suggestions?: string[] - sources?: Document[] -} + messageId: string; + chatId: string; + createdAt: Date; + content: string; + role: 'user' | 'assistant'; + suggestions?: string[]; + sources?: Document[]; +}; const useSocket = ( url: string, setIsWSReady: (ready: boolean) => void, setError: (error: boolean) => void, ) => { - const [ws, setWs] = useState<WebSocket | null>(null) + const [ws, setWs] = useState<WebSocket | null>(null); useEffect(() => { if (!ws) { const connectWs = async () => { - let chatModel = localStorage.getItem('chatModel') - let chatModelProvider = localStorage.getItem('chatModelProvider') - let embeddingModel = localStorage.getItem('embeddingModel') + let chatModel = localStorage.getItem('chatModel'); + let chatModelProvider = localStorage.getItem('chatModelProvider'); + let embeddingModel = localStorage.getItem('embeddingModel'); let embeddingModelProvider = localStorage.getItem( 'embeddingModelProvider', - ) + ); const providers = await fetch( `${process.env.NEXT_PUBLIC_API_URL}/models`, @@ -45,7 +45,7 @@ const useSocket = ( 'Content-Type': 'application/json', }, }, - ).then(async res => await res.json()) + ).then(async (res) => await res.json()); if ( !chatModel || @@ -54,55 +54,58 @@ const useSocket = ( !embeddingModelProvider ) { if (!chatModel || !chatModelProvider) { - const chatModelProviders = providers.chatModelProviders + const chatModelProviders = providers.chatModelProviders; - chatModelProvider = Object.keys(chatModelProviders)[0] + chatModelProvider = Object.keys(chatModelProviders)[0]; if (chatModelProvider === 'custom_openai') { toast.error( 'Seems like you are using the custom OpenAI provider, please open the settings and configure the API key and base URL', - ) - setError(true) - return + ); + setError(true); + return; } else { - chatModel = Object.keys(chatModelProviders[chatModelProvider])[0] + chatModel = Object.keys(chatModelProviders[chatModelProvider])[0]; if ( !chatModelProviders || Object.keys(chatModelProviders).length === 0 ) - return toast.error('No chat models available') + return toast.error('No chat models available'); } } if (!embeddingModel || !embeddingModelProvider) { - const embeddingModelProviders = providers.embeddingModelProviders + const embeddingModelProviders = providers.embeddingModelProviders; if ( !embeddingModelProviders || Object.keys(embeddingModelProviders).length === 0 ) - return toast.error('No embedding models available') + return toast.error('No embedding models available'); - embeddingModelProvider = Object.keys(embeddingModelProviders)[0] + embeddingModelProvider = Object.keys(embeddingModelProviders)[0]; embeddingModel = Object.keys( embeddingModelProviders[embeddingModelProvider], - )[0] + )[0]; } - localStorage.setItem('chatModel', chatModel!) - localStorage.setItem('chatModelProvider', chatModelProvider) - localStorage.setItem('embeddingModel', embeddingModel!) - localStorage.setItem('embeddingModelProvider', embeddingModelProvider) + localStorage.setItem('chatModel', chatModel!); + localStorage.setItem('chatModelProvider', chatModelProvider); + localStorage.setItem('embeddingModel', embeddingModel!); + localStorage.setItem( + 'embeddingModelProvider', + embeddingModelProvider, + ); } else { - const chatModelProviders = providers.chatModelProviders - const embeddingModelProviders = providers.embeddingModelProviders + const chatModelProviders = providers.chatModelProviders; + const embeddingModelProviders = providers.embeddingModelProviders; if ( Object.keys(chatModelProviders).length > 0 && !chatModelProviders[chatModelProvider] ) { - chatModelProvider = Object.keys(chatModelProviders)[0] - localStorage.setItem('chatModelProvider', chatModelProvider) + chatModelProvider = Object.keys(chatModelProviders)[0]; + localStorage.setItem('chatModelProvider', chatModelProvider); } if ( @@ -110,19 +113,19 @@ const useSocket = ( chatModelProvider != 'custom_openai' && !chatModelProviders[chatModelProvider][chatModel] ) { - chatModel = Object.keys(chatModelProviders[chatModelProvider])[0] - localStorage.setItem('chatModel', chatModel) + chatModel = Object.keys(chatModelProviders[chatModelProvider])[0]; + localStorage.setItem('chatModel', chatModel); } if ( Object.keys(embeddingModelProviders).length > 0 && !embeddingModelProviders[embeddingModelProvider] ) { - embeddingModelProvider = Object.keys(embeddingModelProviders)[0] + embeddingModelProvider = Object.keys(embeddingModelProviders)[0]; localStorage.setItem( 'embeddingModelProvider', embeddingModelProvider, - ) + ); } if ( @@ -131,77 +134,77 @@ const useSocket = ( ) { embeddingModel = Object.keys( embeddingModelProviders[embeddingModelProvider], - )[0] - localStorage.setItem('embeddingModel', embeddingModel) + )[0]; + localStorage.setItem('embeddingModel', embeddingModel); } } - const wsURL = new URL(url) - const searchParams = new URLSearchParams({}) + const wsURL = new URL(url); + const searchParams = new URLSearchParams({}); - searchParams.append('chatModel', chatModel!) - searchParams.append('chatModelProvider', chatModelProvider) + searchParams.append('chatModel', chatModel!); + searchParams.append('chatModelProvider', chatModelProvider); if (chatModelProvider === 'custom_openai') { searchParams.append( 'openAIApiKey', localStorage.getItem('openAIApiKey')!, - ) + ); searchParams.append( 'openAIBaseURL', localStorage.getItem('openAIBaseURL')!, - ) + ); } - searchParams.append('embeddingModel', embeddingModel!) - searchParams.append('embeddingModelProvider', embeddingModelProvider) + searchParams.append('embeddingModel', embeddingModel!); + searchParams.append('embeddingModelProvider', embeddingModelProvider); - wsURL.search = searchParams.toString() + wsURL.search = searchParams.toString(); - const ws = new WebSocket(wsURL.toString()) + const ws = new WebSocket(wsURL.toString()); const timeoutId = setTimeout(() => { if (ws.readyState !== 1) { toast.error( 'Failed to connect to the server. Please try again later.', - ) + ); } - }, 10000) + }, 10000); ws.onopen = () => { - console.log('[DEBUG] open') - clearTimeout(timeoutId) - setIsWSReady(true) - } + console.log('[DEBUG] open'); + clearTimeout(timeoutId); + setIsWSReady(true); + }; ws.onerror = () => { - clearTimeout(timeoutId) - setError(true) - toast.error('WebSocket connection error.') - } + clearTimeout(timeoutId); + setError(true); + toast.error('WebSocket connection error.'); + }; ws.onclose = () => { - clearTimeout(timeoutId) - setError(true) - console.log('[DEBUG] closed') - } + clearTimeout(timeoutId); + setError(true); + console.log('[DEBUG] closed'); + }; - ws.addEventListener('message', e => { - const data = JSON.parse(e.data) + ws.addEventListener('message', (e) => { + const data = JSON.parse(e.data); if (data.type === 'error') { - toast.error(data.data) + toast.error(data.data); } - }) + }); - setWs(ws) - } + setWs(ws); + }; - connectWs() + connectWs(); } - }, [ws, url, setIsWSReady, setError]) + }, [ws, url, setIsWSReady, setError]); - return ws -} + return ws; +}; const loadMessages = async ( chatId: string, @@ -219,66 +222,66 @@ const loadMessages = async ( 'Content-Type': 'application/json', }, }, - ) + ); if (res.status === 404) { - setNotFound(true) - setIsMessagesLoaded(true) - return + setNotFound(true); + setIsMessagesLoaded(true); + return; } - const data = await res.json() + const data = await res.json(); const messages = data.messages.map((msg: any) => { return { ...msg, ...JSON.parse(msg.metadata), - } - }) as Message[] + }; + }) as Message[]; - setMessages(messages) + setMessages(messages); - const history = messages.map(msg => { - return [msg.role, msg.content] - }) as [string, string][] + const history = messages.map((msg) => { + return [msg.role, msg.content]; + }) as [string, string][]; - console.log('[DEBUG] messages loaded') + console.log('[DEBUG] messages loaded'); - document.title = messages[0].content + document.title = messages[0].content; - setChatHistory(history) - setFocusMode(data.chat.focusMode) - setIsMessagesLoaded(true) -} + setChatHistory(history); + setFocusMode(data.chat.focusMode); + setIsMessagesLoaded(true); +}; const ChatWindow = ({ id }: { id?: string }) => { - const searchParams = useSearchParams() - const initialMessage = searchParams.get('q') + const searchParams = useSearchParams(); + const initialMessage = searchParams.get('q'); - const [chatId, setChatId] = useState<string | undefined>(id) - const [newChatCreated, setNewChatCreated] = useState(false) + const [chatId, setChatId] = useState<string | undefined>(id); + const [newChatCreated, setNewChatCreated] = useState(false); - const [hasError, setHasError] = useState(false) - const [isReady, setIsReady] = useState(false) + const [hasError, setHasError] = useState(false); + const [isReady, setIsReady] = useState(false); - const [isWSReady, setIsWSReady] = useState(false) + const [isWSReady, setIsWSReady] = useState(false); const ws = useSocket( process.env.NEXT_PUBLIC_WS_URL!, setIsWSReady, setHasError, - ) + ); - const [loading, setLoading] = useState(false) - const [messageAppeared, setMessageAppeared] = useState(false) + const [loading, setLoading] = useState(false); + const [messageAppeared, setMessageAppeared] = useState(false); - const [chatHistory, setChatHistory] = useState<[string, string][]>([]) - const [messages, setMessages] = useState<Message[]>([]) + const [chatHistory, setChatHistory] = useState<[string, string][]>([]); + const [messages, setMessages] = useState<Message[]>([]); - const [focusMode, setFocusMode] = useState('webSearch') + const [focusMode, setFocusMode] = useState('webSearch'); - const [isMessagesLoaded, setIsMessagesLoaded] = useState(false) + const [isMessagesLoaded, setIsMessagesLoaded] = useState(false); - const [notFound, setNotFound] = useState(false) + const [notFound, setNotFound] = useState(false); useEffect(() => { if ( @@ -294,46 +297,46 @@ const ChatWindow = ({ id }: { id?: string }) => { setChatHistory, setFocusMode, setNotFound, - ) + ); } else if (!chatId) { - setNewChatCreated(true) - setIsMessagesLoaded(true) - setChatId(crypto.randomBytes(20).toString('hex')) + setNewChatCreated(true); + setIsMessagesLoaded(true); + setChatId(crypto.randomBytes(20).toString('hex')); } // eslint-disable-next-line react-hooks/exhaustive-deps - }, []) + }, []); useEffect(() => { return () => { if (ws?.readyState === 1) { - ws.close() - console.log('[DEBUG] closed') + ws.close(); + console.log('[DEBUG] closed'); } - } - }, []) + }; + }, []); - const messagesRef = useRef<Message[]>([]) + const messagesRef = useRef<Message[]>([]); useEffect(() => { - messagesRef.current = messages - }, [messages]) + messagesRef.current = messages; + }, [messages]); useEffect(() => { if (isMessagesLoaded && isWSReady) { - setIsReady(true) + setIsReady(true); } - }, [isMessagesLoaded, isWSReady]) + }, [isMessagesLoaded, isWSReady]); const sendMessage = async (message: string) => { - if (loading) return - setLoading(true) - setMessageAppeared(false) + if (loading) return; + setLoading(true); + setMessageAppeared(false); - let sources: Document[] | undefined = undefined - let recievedMessage = '' - let added = false + let sources: Document[] | undefined = undefined; + let recievedMessage = ''; + let added = false; - const messageId = crypto.randomBytes(7).toString('hex') + const messageId = crypto.randomBytes(7).toString('hex'); ws?.send( JSON.stringify({ @@ -345,9 +348,9 @@ const ChatWindow = ({ id }: { id?: string }) => { focusMode: focusMode, history: [...chatHistory, ['human', message]], }), - ) + ); - setMessages(prevMessages => [ + setMessages((prevMessages) => [ ...prevMessages, { content: message, @@ -356,21 +359,21 @@ const ChatWindow = ({ id }: { id?: string }) => { role: 'user', createdAt: new Date(), }, - ]) + ]); const messageHandler = async (e: MessageEvent) => { - const data = JSON.parse(e.data) + const data = JSON.parse(e.data); if (data.type === 'error') { - toast.error(data.data) - setLoading(false) - return + toast.error(data.data); + setLoading(false); + return; } if (data.type === 'sources') { - sources = data.data + sources = data.data; if (!added) { - setMessages(prevMessages => [ + setMessages((prevMessages) => [ ...prevMessages, { content: '', @@ -380,15 +383,15 @@ const ChatWindow = ({ id }: { id?: string }) => { sources: sources, createdAt: new Date(), }, - ]) - added = true + ]); + added = true; } - setMessageAppeared(true) + setMessageAppeared(true); } if (data.type === 'message') { if (!added) { - setMessages(prevMessages => [ + setMessages((prevMessages) => [ ...prevMessages, { content: data.data, @@ -398,35 +401,35 @@ const ChatWindow = ({ id }: { id?: string }) => { sources: sources, createdAt: new Date(), }, - ]) - added = true + ]); + added = true; } - setMessages(prev => - prev.map(message => { + setMessages((prev) => + prev.map((message) => { if (message.messageId === data.messageId) { - return { ...message, content: message.content + data.data } + return { ...message, content: message.content + data.data }; } - return message + return message; }), - ) + ); - recievedMessage += data.data - setMessageAppeared(true) + recievedMessage += data.data; + setMessageAppeared(true); } if (data.type === 'messageEnd') { - setChatHistory(prevHistory => [ + setChatHistory((prevHistory) => [ ...prevHistory, ['human', message], ['assistant', recievedMessage], - ]) + ]); - ws?.removeEventListener('message', messageHandler) - setLoading(false) + ws?.removeEventListener('message', messageHandler); + setLoading(false); - const lastMsg = messagesRef.current[messagesRef.current.length - 1] + const lastMsg = messagesRef.current[messagesRef.current.length - 1]; if ( lastMsg.role === 'assistant' && @@ -434,54 +437,54 @@ const ChatWindow = ({ id }: { id?: string }) => { lastMsg.sources.length > 0 && !lastMsg.suggestions ) { - const suggestions = await getSuggestions(messagesRef.current) - setMessages(prev => - prev.map(msg => { + const suggestions = await getSuggestions(messagesRef.current); + setMessages((prev) => + prev.map((msg) => { if (msg.messageId === lastMsg.messageId) { - return { ...msg, suggestions: suggestions } + return { ...msg, suggestions: suggestions }; } - return msg + return msg; }), - ) + ); } } - } + }; - ws?.addEventListener('message', messageHandler) - } + ws?.addEventListener('message', messageHandler); + }; const rewrite = (messageId: string) => { - const index = messages.findIndex(msg => msg.messageId === messageId) + const index = messages.findIndex((msg) => msg.messageId === messageId); - if (index === -1) return + if (index === -1) return; - const message = messages[index - 1] + const message = messages[index - 1]; - setMessages(prev => { - return [...prev.slice(0, messages.length > 2 ? index - 1 : 0)] - }) - setChatHistory(prev => { - return [...prev.slice(0, messages.length > 2 ? index - 1 : 0)] - }) + setMessages((prev) => { + return [...prev.slice(0, messages.length > 2 ? index - 1 : 0)]; + }); + setChatHistory((prev) => { + return [...prev.slice(0, messages.length > 2 ? index - 1 : 0)]; + }); - sendMessage(message.content) - } + sendMessage(message.content); + }; useEffect(() => { if (isReady && initialMessage) { - sendMessage(initialMessage) + sendMessage(initialMessage); } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [isReady, initialMessage]) + }, [isReady, initialMessage]); if (hasError) { return ( - <div className='flex flex-col items-center justify-center min-h-screen'> - <p className='dark:text-white/70 text-black/70 text-sm'> + <div className="flex flex-col items-center justify-center min-h-screen"> + <p className="dark:text-white/70 text-black/70 text-sm"> Failed to connect to the server. Please try again later. </p> </div> - ) + ); } return isReady ? ( @@ -510,25 +513,25 @@ const ChatWindow = ({ id }: { id?: string }) => { </div> ) ) : ( - <div className='flex flex-row items-center justify-center min-h-screen'> + <div className="flex flex-row items-center justify-center min-h-screen"> <svg - aria-hidden='true' - className='w-8 h-8 text-light-200 fill-light-secondary dark:text-[#202020] animate-spin dark:fill-[#ffffff3b]' - viewBox='0 0 100 101' - fill='none' - xmlns='http://www.w3.org/2000/svg' + aria-hidden="true" + className="w-8 h-8 text-light-200 fill-light-secondary dark:text-[#202020] animate-spin dark:fill-[#ffffff3b]" + viewBox="0 0 100 101" + fill="none" + xmlns="http://www.w3.org/2000/svg" > <path - d='M100 50.5908C100.003 78.2051 78.1951 100.003 50.5908 100C22.9765 99.9972 0.997224 78.018 1 50.4037C1.00281 22.7993 22.8108 0.997224 50.4251 1C78.0395 1.00281 100.018 22.8108 100 50.4251ZM9.08164 50.594C9.06312 73.3997 27.7909 92.1272 50.5966 92.1457C73.4023 92.1642 92.1298 73.4365 92.1483 50.6308C92.1669 27.8251 73.4392 9.0973 50.6335 9.07878C27.8278 9.06026 9.10003 27.787 9.08164 50.594Z' - fill='currentColor' + d="M100 50.5908C100.003 78.2051 78.1951 100.003 50.5908 100C22.9765 99.9972 0.997224 78.018 1 50.4037C1.00281 22.7993 22.8108 0.997224 50.4251 1C78.0395 1.00281 100.018 22.8108 100 50.4251ZM9.08164 50.594C9.06312 73.3997 27.7909 92.1272 50.5966 92.1457C73.4023 92.1642 92.1298 73.4365 92.1483 50.6308C92.1669 27.8251 73.4392 9.0973 50.6335 9.07878C27.8278 9.06026 9.10003 27.787 9.08164 50.594Z" + fill="currentColor" /> <path - d='M93.9676 39.0409C96.393 38.4037 97.8624 35.9116 96.9801 33.5533C95.1945 28.8227 92.871 24.3692 90.0681 20.348C85.6237 14.1775 79.4473 9.36872 72.0454 6.45794C64.6435 3.54717 56.3134 2.65431 48.3133 3.89319C45.869 4.27179 44.3768 6.77534 45.014 9.20079C45.6512 11.6262 48.1343 13.0956 50.5786 12.717C56.5073 11.8281 62.5542 12.5399 68.0406 14.7911C73.527 17.0422 78.2187 20.7487 81.5841 25.4923C83.7976 28.5886 85.4467 32.059 86.4416 35.7474C87.1273 38.1189 89.5423 39.6781 91.9676 39.0409Z' - fill='currentFill' + d="M93.9676 39.0409C96.393 38.4037 97.8624 35.9116 96.9801 33.5533C95.1945 28.8227 92.871 24.3692 90.0681 20.348C85.6237 14.1775 79.4473 9.36872 72.0454 6.45794C64.6435 3.54717 56.3134 2.65431 48.3133 3.89319C45.869 4.27179 44.3768 6.77534 45.014 9.20079C45.6512 11.6262 48.1343 13.0956 50.5786 12.717C56.5073 11.8281 62.5542 12.5399 68.0406 14.7911C73.527 17.0422 78.2187 20.7487 81.5841 25.4923C83.7976 28.5886 85.4467 32.059 86.4416 35.7474C87.1273 38.1189 89.5423 39.6781 91.9676 39.0409Z" + fill="currentFill" /> </svg> </div> - ) -} + ); +}; -export default ChatWindow +export default ChatWindow; From 92abbc5b981b9809466c00363c7f90ecbcd1d857 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 29 Aug 2024 16:54:37 +0530 Subject: [PATCH 014/115] feat(webSearchRetriever): use `question` instead of `input` --- src/agents/webSearchAgent.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/agents/webSearchAgent.ts b/src/agents/webSearchAgent.ts index 159023e..77ec181 100644 --- a/src/agents/webSearchAgent.ts +++ b/src/agents/webSearchAgent.ts @@ -248,7 +248,7 @@ const createBasicWebSearchRetrieverChain = (llm: BaseChatModel) => { return { query: question, docs: docs }; } else { - const res = await searchSearxng(input, { + const res = await searchSearxng(question, { language: 'en', }); @@ -264,7 +264,7 @@ const createBasicWebSearchRetrieverChain = (llm: BaseChatModel) => { }), ); - return { query: input, docs: documents }; + return { query: question, docs: documents }; } }), ]); From c4f52adb456d16ddc957edeafa82de27c3a9f953 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Mon, 2 Sep 2024 11:44:40 +0530 Subject: [PATCH 015/115] feat(textarea): handle "/" keys --- ui/components/EmptyChatMessageInput.tsx | 21 ++++++++++++++------- ui/components/MessageInput.tsx | 21 ++++++++++++++------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/ui/components/EmptyChatMessageInput.tsx b/ui/components/EmptyChatMessageInput.tsx index 0ff9b2e..39d3f16 100644 --- a/ui/components/EmptyChatMessageInput.tsx +++ b/ui/components/EmptyChatMessageInput.tsx @@ -18,14 +18,21 @@ const EmptyChatMessageInput = ({ const inputRef = useRef<HTMLTextAreaElement | null>(null); - const handleKeyDown = (e: KeyboardEvent) => { - if (e.key === '/') { - e.preventDefault(); - inputRef.current?.focus(); - } - }; - useEffect(() => { + const handleKeyDown = (e: KeyboardEvent) => { + const activeElement = document.activeElement; + + const isInputFocused = + activeElement?.tagName === 'INPUT' || + activeElement?.tagName === 'TEXTAREA' || + activeElement?.hasAttribute('contenteditable'); + + if (e.key === '/' && !isInputFocused) { + e.preventDefault(); + inputRef.current?.focus(); + } + }; + document.addEventListener('keydown', handleKeyDown); return () => { diff --git a/ui/components/MessageInput.tsx b/ui/components/MessageInput.tsx index 2229cdf..05d44a6 100644 --- a/ui/components/MessageInput.tsx +++ b/ui/components/MessageInput.tsx @@ -27,14 +27,21 @@ const MessageInput = ({ const inputRef = useRef<HTMLTextAreaElement | null>(null); - const handleKeyDown = (e: KeyboardEvent) => { - if (e.key === '/') { - e.preventDefault(); - inputRef.current?.focus(); - } - }; - useEffect(() => { + const handleKeyDown = (e: KeyboardEvent) => { + const activeElement = document.activeElement; + + const isInputFocused = + activeElement?.tagName === 'INPUT' || + activeElement?.tagName === 'TEXTAREA' || + activeElement?.hasAttribute('contenteditable'); + + if (e.key === '/' && !isInputFocused) { + e.preventDefault(); + inputRef.current?.focus(); + } + }; + document.addEventListener('keydown', handleKeyDown); return () => { From 07e5615860ad420e147410731f9f350839f97bf7 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 4 Sep 2024 18:54:54 +0530 Subject: [PATCH 016/115] feat(docker-compose): link `config.toml` as vol. --- docker-compose.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yaml b/docker-compose.yaml index d6f9203..d3892e5 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -21,6 +21,7 @@ services: - 3001:3001 volumes: - backend-dbstore:/home/perplexica/data + - ./config.toml:/home/perplexica/config.toml extra_hosts: - 'host.docker.internal:host-gateway' networks: From 1fcd64ad421450bd1015e8cc52697c3a35d89c11 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 5 Sep 2024 18:40:07 +0530 Subject: [PATCH 017/115] feat(docker-file): use SearXNG URL from env --- backend.dockerfile | 3 +-- src/config.ts | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/backend.dockerfile b/backend.dockerfile index 4886573..0169218 100644 --- a/backend.dockerfile +++ b/backend.dockerfile @@ -1,6 +1,7 @@ FROM node:slim ARG SEARXNG_API_URL +ENV SEARXNG_API_URL=${SEARXNG_API_URL} WORKDIR /home/perplexica @@ -11,8 +12,6 @@ COPY drizzle.config.ts /home/perplexica/ COPY package.json /home/perplexica/ COPY yarn.lock /home/perplexica/ -RUN sed -i "s|SEARXNG = \".*\"|SEARXNG = \"${SEARXNG_API_URL}\"|g" /home/perplexica/config.toml - RUN mkdir /home/perplexica/data RUN yarn install diff --git a/src/config.ts b/src/config.ts index 9ebc182..bb69335 100644 --- a/src/config.ts +++ b/src/config.ts @@ -40,7 +40,8 @@ export const getGroqApiKey = () => loadConfig().API_KEYS.GROQ; export const getAnthropicApiKey = () => loadConfig().API_KEYS.ANTHROPIC; -export const getSearxngApiEndpoint = () => loadConfig().API_ENDPOINTS.SEARXNG; +export const getSearxngApiEndpoint = () => + process.env.SEARXNG_API_URL || loadConfig().API_ENDPOINTS.SEARXNG; export const getOllamaApiEndpoint = () => loadConfig().API_ENDPOINTS.OLLAMA; From 40f551c426e0ca67a76d2438d6404b7b7e77f877 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Sun, 15 Sep 2024 10:16:20 +0530 Subject: [PATCH 018/115] feat(search-button): add empty check --- ui/components/SearchImages.tsx | 2 +- ui/components/SearchVideos.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/components/SearchImages.tsx b/ui/components/SearchImages.tsx index b53b8b0..6025925 100644 --- a/ui/components/SearchImages.tsx +++ b/ui/components/SearchImages.tsx @@ -51,7 +51,7 @@ const SearchImages = ({ const data = await res.json(); - const images = data.images; + const images = data.images ?? []; setImages(images); setSlides( images.map((image: Image) => { diff --git a/ui/components/SearchVideos.tsx b/ui/components/SearchVideos.tsx index 2646322..74d4381 100644 --- a/ui/components/SearchVideos.tsx +++ b/ui/components/SearchVideos.tsx @@ -64,7 +64,7 @@ const Searchvideos = ({ const data = await res.json(); - const videos = data.videos; + const videos = data.videos ?? []; setVideos(videos); setSlides( videos.map((video: Video) => { From 1589f16d5a00e913acc7d56f6fcb5f858a426048 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Tue, 24 Sep 2024 22:34:43 +0530 Subject: [PATCH 019/115] feat(providers): add `displayName` property --- src/lib/providers/anthropic.ts | 52 ++++++---- src/lib/providers/groq.ts | 161 ++++++++++++++++------------- src/lib/providers/ollama.ts | 26 +++-- src/lib/providers/openai.ts | 87 ++++++++++------ src/lib/providers/transformers.ts | 27 +++-- src/routes/config.ts | 64 +++++++----- src/routes/images.ts | 2 +- src/routes/suggestions.ts | 2 +- src/routes/videos.ts | 2 +- src/websocket/connectionManager.ts | 7 +- ui/components/SearchVideos.tsx | 2 +- ui/components/SettingsDialog.tsx | 28 +++-- 12 files changed, 277 insertions(+), 183 deletions(-) diff --git a/src/lib/providers/anthropic.ts b/src/lib/providers/anthropic.ts index 58cd164..90460c6 100644 --- a/src/lib/providers/anthropic.ts +++ b/src/lib/providers/anthropic.ts @@ -9,26 +9,38 @@ export const loadAnthropicChatModels = async () => { try { const chatModels = { - 'Claude 3.5 Sonnet': new ChatAnthropic({ - temperature: 0.7, - anthropicApiKey: anthropicApiKey, - model: 'claude-3-5-sonnet-20240620', - }), - 'Claude 3 Opus': new ChatAnthropic({ - temperature: 0.7, - anthropicApiKey: anthropicApiKey, - model: 'claude-3-opus-20240229', - }), - 'Claude 3 Sonnet': new ChatAnthropic({ - temperature: 0.7, - anthropicApiKey: anthropicApiKey, - model: 'claude-3-sonnet-20240229', - }), - 'Claude 3 Haiku': new ChatAnthropic({ - temperature: 0.7, - anthropicApiKey: anthropicApiKey, - model: 'claude-3-haiku-20240307', - }), + 'claude-3-5-sonnet-20240620': { + displayName: 'Claude 3.5 Sonnet', + model: new ChatAnthropic({ + temperature: 0.7, + anthropicApiKey: anthropicApiKey, + model: 'claude-3-5-sonnet-20240620', + }), + }, + 'claude-3-opus-20240229': { + displayName: 'Claude 3 Opus', + model: new ChatAnthropic({ + temperature: 0.7, + anthropicApiKey: anthropicApiKey, + model: 'claude-3-opus-20240229', + }), + }, + 'claude-3-sonnet-20240229': { + displayName: 'Claude 3 Sonnet', + model: new ChatAnthropic({ + temperature: 0.7, + anthropicApiKey: anthropicApiKey, + model: 'claude-3-sonnet-20240229', + }), + }, + 'claude-3-haiku-20240307': { + displayName: 'Claude 3 Haiku', + model: new ChatAnthropic({ + temperature: 0.7, + anthropicApiKey: anthropicApiKey, + model: 'claude-3-haiku-20240307', + }), + }, }; return chatModels; diff --git a/src/lib/providers/groq.ts b/src/lib/providers/groq.ts index ffe8f6c..6249267 100644 --- a/src/lib/providers/groq.ts +++ b/src/lib/providers/groq.ts @@ -9,76 +9,97 @@ export const loadGroqChatModels = async () => { try { const chatModels = { - 'Llama 3.1 70B': new ChatOpenAI( - { - openAIApiKey: groqApiKey, - modelName: 'llama-3.1-70b-versatile', - temperature: 0.7, - }, - { - baseURL: 'https://api.groq.com/openai/v1', - }, - ), - 'Llama 3.1 8B': new ChatOpenAI( - { - openAIApiKey: groqApiKey, - modelName: 'llama-3.1-8b-instant', - temperature: 0.7, - }, - { - baseURL: 'https://api.groq.com/openai/v1', - }, - ), - 'LLaMA3 8b': new ChatOpenAI( - { - openAIApiKey: groqApiKey, - modelName: 'llama3-8b-8192', - temperature: 0.7, - }, - { - baseURL: 'https://api.groq.com/openai/v1', - }, - ), - 'LLaMA3 70b': new ChatOpenAI( - { - openAIApiKey: groqApiKey, - modelName: 'llama3-70b-8192', - temperature: 0.7, - }, - { - baseURL: 'https://api.groq.com/openai/v1', - }, - ), - 'Mixtral 8x7b': new ChatOpenAI( - { - openAIApiKey: groqApiKey, - modelName: 'mixtral-8x7b-32768', - temperature: 0.7, - }, - { - baseURL: 'https://api.groq.com/openai/v1', - }, - ), - 'Gemma 7b': new ChatOpenAI( - { - openAIApiKey: groqApiKey, - modelName: 'gemma-7b-it', - temperature: 0.7, - }, - { - baseURL: 'https://api.groq.com/openai/v1', - }, - ), - 'Gemma2 9b': new ChatOpenAI( - { - openAIApiKey: groqApiKey, - modelName: 'gemma2-9b-it', - temperature: 0.7, - }, - { - baseURL: 'https://api.groq.com/openai/v1', - }, - ), + 'llama-3.1-70b-versatile': { + displayName: 'Llama 3.1 70B', + model: new ChatOpenAI( + { + openAIApiKey: groqApiKey, + modelName: 'llama-3.1-70b-versatile', + temperature: 0.7, + }, + { + baseURL: 'https://api.groq.com/openai/v1', + }, + ), + }, + 'llama-3.1-8b-instant': { + displayName: 'Llama 3.1 8B', + model: new ChatOpenAI( + { + openAIApiKey: groqApiKey, + modelName: 'llama-3.1-8b-instant', + temperature: 0.7, + }, + { + baseURL: 'https://api.groq.com/openai/v1', + }, + ), + }, + 'llama3-8b-8192': { + displayName: 'LLaMA3 8B', + model: new ChatOpenAI( + { + openAIApiKey: groqApiKey, + modelName: 'llama3-8b-8192', + temperature: 0.7, + }, + { + baseURL: 'https://api.groq.com/openai/v1', + }, + ), + }, + 'llama3-70b-8192': { + displayName: 'LLaMA3 70B', + model: new ChatOpenAI( + { + openAIApiKey: groqApiKey, + modelName: 'llama3-70b-8192', + temperature: 0.7, + }, + { + baseURL: 'https://api.groq.com/openai/v1', + }, + ), + }, + 'mixtral-8x7b-32768': { + displayName: 'Mixtral 8x7B', + model: new ChatOpenAI( + { + openAIApiKey: groqApiKey, + modelName: 'mixtral-8x7b-32768', + temperature: 0.7, + }, + { + baseURL: 'https://api.groq.com/openai/v1', + }, + ), + }, + 'gemma-7b-it': { + displayName: 'Gemma 7B', + model: new ChatOpenAI( + { + openAIApiKey: groqApiKey, + modelName: 'gemma-7b-it', + temperature: 0.7, + }, + { + baseURL: 'https://api.groq.com/openai/v1', + }, + ), + }, + 'gemma2-9b-it': { + displayName: 'Gemma2 9B', + model: new ChatOpenAI( + { + openAIApiKey: groqApiKey, + modelName: 'gemma2-9b-it', + temperature: 0.7, + }, + { + baseURL: 'https://api.groq.com/openai/v1', + }, + ), + }, }; return chatModels; diff --git a/src/lib/providers/ollama.ts b/src/lib/providers/ollama.ts index b2901ff..ed68bfa 100644 --- a/src/lib/providers/ollama.ts +++ b/src/lib/providers/ollama.ts @@ -18,11 +18,15 @@ export const loadOllamaChatModels = async () => { const { models: ollamaModels } = (await response.json()) as any; const chatModels = ollamaModels.reduce((acc, model) => { - acc[model.model] = new ChatOllama({ - baseUrl: ollamaEndpoint, - model: model.model, - temperature: 0.7, - }); + acc[model.model] = { + displayName: model.name, + model: new ChatOllama({ + baseUrl: ollamaEndpoint, + model: model.model, + temperature: 0.7, + }), + }; + return acc; }, {}); @@ -48,10 +52,14 @@ export const loadOllamaEmbeddingsModels = async () => { const { models: ollamaModels } = (await response.json()) as any; const embeddingsModels = ollamaModels.reduce((acc, model) => { - acc[model.model] = new OllamaEmbeddings({ - baseUrl: ollamaEndpoint, - model: model.model, - }); + acc[model.model] = { + displayName: model.name, + model: new OllamaEmbeddings({ + baseUrl: ollamaEndpoint, + model: model.model, + }), + }; + return acc; }, {}); diff --git a/src/lib/providers/openai.ts b/src/lib/providers/openai.ts index 8673954..3747e37 100644 --- a/src/lib/providers/openai.ts +++ b/src/lib/providers/openai.ts @@ -9,31 +9,46 @@ export const loadOpenAIChatModels = async () => { try { const chatModels = { - 'GPT-3.5 turbo': new ChatOpenAI({ - openAIApiKey, - modelName: 'gpt-3.5-turbo', - temperature: 0.7, - }), - 'GPT-4': new ChatOpenAI({ - openAIApiKey, - modelName: 'gpt-4', - temperature: 0.7, - }), - 'GPT-4 turbo': new ChatOpenAI({ - openAIApiKey, - modelName: 'gpt-4-turbo', - temperature: 0.7, - }), - 'GPT-4 omni': new ChatOpenAI({ - openAIApiKey, - modelName: 'gpt-4o', - temperature: 0.7, - }), - 'GPT-4 omni mini': new ChatOpenAI({ - openAIApiKey, - modelName: 'gpt-4o-mini', - temperature: 0.7, - }), + 'gpt-3.5-turbo': { + displayName: 'GPT-3.5 Turbo', + model: new ChatOpenAI({ + openAIApiKey, + modelName: 'gpt-3.5-turbo', + temperature: 0.7, + }), + }, + 'gpt-4': { + displayName: 'GPT-4', + model: new ChatOpenAI({ + openAIApiKey, + modelName: 'gpt-4', + temperature: 0.7, + }), + }, + 'gpt-4-turbo': { + displayName: 'GPT-4 turbo', + model: new ChatOpenAI({ + openAIApiKey, + modelName: 'gpt-4-turbo', + temperature: 0.7, + }), + }, + 'gpt-4o': { + displayName: 'GPT-4 omni', + model: new ChatOpenAI({ + openAIApiKey, + modelName: 'gpt-4o', + temperature: 0.7, + }), + }, + 'gpt-4o-mini': { + displayName: 'GPT-4 omni mini', + model: new ChatOpenAI({ + openAIApiKey, + modelName: 'gpt-4o-mini', + temperature: 0.7, + }), + }, }; return chatModels; @@ -50,14 +65,20 @@ export const loadOpenAIEmbeddingsModels = async () => { try { const embeddingModels = { - 'Text embedding 3 small': new OpenAIEmbeddings({ - openAIApiKey, - modelName: 'text-embedding-3-small', - }), - 'Text embedding 3 large': new OpenAIEmbeddings({ - openAIApiKey, - modelName: 'text-embedding-3-large', - }), + 'text-embedding-3-small': { + displayName: 'Text Embedding 3 Small', + model: new OpenAIEmbeddings({ + openAIApiKey, + modelName: 'text-embedding-3-small', + }), + }, + 'text-embedding-3-large': { + displayName: 'Text Embedding 3 Large', + model: new OpenAIEmbeddings({ + openAIApiKey, + modelName: 'text-embedding-3-large', + }), + }, }; return embeddingModels; diff --git a/src/lib/providers/transformers.ts b/src/lib/providers/transformers.ts index 0ec7052..8a3417d 100644 --- a/src/lib/providers/transformers.ts +++ b/src/lib/providers/transformers.ts @@ -4,15 +4,24 @@ import { HuggingFaceTransformersEmbeddings } from '../huggingfaceTransformer'; export const loadTransformersEmbeddingsModels = async () => { try { const embeddingModels = { - 'BGE Small': new HuggingFaceTransformersEmbeddings({ - modelName: 'Xenova/bge-small-en-v1.5', - }), - 'GTE Small': new HuggingFaceTransformersEmbeddings({ - modelName: 'Xenova/gte-small', - }), - 'Bert Multilingual': new HuggingFaceTransformersEmbeddings({ - modelName: 'Xenova/bert-base-multilingual-uncased', - }), + 'xenova-bge-small-en-v1.5': { + displayName: 'BGE Small', + model: new HuggingFaceTransformersEmbeddings({ + modelName: 'Xenova/bge-small-en-v1.5', + }), + }, + 'xenova-gte-small': { + displayName: 'GTE Small', + model: new HuggingFaceTransformersEmbeddings({ + modelName: 'Xenova/gte-small', + }), + }, + 'xenova-bert-base-multilingual-uncased': { + displayName: 'Bert Multilingual', + model: new HuggingFaceTransformersEmbeddings({ + modelName: 'Xenova/bert-base-multilingual-uncased', + }), + }, }; return embeddingModels; diff --git a/src/routes/config.ts b/src/routes/config.ts index f255560..f635e4b 100644 --- a/src/routes/config.ts +++ b/src/routes/config.ts @@ -10,38 +10,54 @@ import { getOpenaiApiKey, updateConfig, } from '../config'; +import logger from '../utils/logger'; const router = express.Router(); router.get('/', async (_, res) => { - const config = {}; + try { + const config = {}; - const [chatModelProviders, embeddingModelProviders] = await Promise.all([ - getAvailableChatModelProviders(), - getAvailableEmbeddingModelProviders(), - ]); + const [chatModelProviders, embeddingModelProviders] = await Promise.all([ + getAvailableChatModelProviders(), + getAvailableEmbeddingModelProviders(), + ]); - config['chatModelProviders'] = {}; - config['embeddingModelProviders'] = {}; + config['chatModelProviders'] = {}; + config['embeddingModelProviders'] = {}; - for (const provider in chatModelProviders) { - config['chatModelProviders'][provider] = Object.keys( - chatModelProviders[provider], - ); + for (const provider in chatModelProviders) { + config['chatModelProviders'][provider] = Object.keys( + chatModelProviders[provider], + ).map((model) => { + return { + name: model, + displayName: chatModelProviders[provider][model].displayName, + }; + }); + } + + for (const provider in embeddingModelProviders) { + config['embeddingModelProviders'][provider] = Object.keys( + embeddingModelProviders[provider], + ).map((model) => { + return { + name: model, + displayName: embeddingModelProviders[provider][model].displayName, + }; + }); + } + + config['openaiApiKey'] = getOpenaiApiKey(); + config['ollamaApiUrl'] = getOllamaApiEndpoint(); + config['anthropicApiKey'] = getAnthropicApiKey(); + config['groqApiKey'] = getGroqApiKey(); + + res.status(200).json(config); + } catch (err: any) { + res.status(500).json({ message: 'An error has occurred.' }); + logger.error(`Error getting config: ${err.message}`); } - - for (const provider in embeddingModelProviders) { - config['embeddingModelProviders'][provider] = Object.keys( - embeddingModelProviders[provider], - ); - } - - config['openaiApiKey'] = getOpenaiApiKey(); - config['ollamaApiUrl'] = getOllamaApiEndpoint(); - config['anthropicApiKey'] = getAnthropicApiKey(); - config['groqApiKey'] = getGroqApiKey(); - - res.status(200).json(config); }); router.post('/', async (req, res) => { diff --git a/src/routes/images.ts b/src/routes/images.ts index 6bd43d3..7806ce7 100644 --- a/src/routes/images.ts +++ b/src/routes/images.ts @@ -26,7 +26,7 @@ router.post('/', async (req, res) => { let llm: BaseChatModel | undefined; if (chatModels[provider] && chatModels[provider][chatModel]) { - llm = chatModels[provider][chatModel] as BaseChatModel | undefined; + llm = chatModels[provider][chatModel].model as BaseChatModel | undefined; } if (!llm) { diff --git a/src/routes/suggestions.ts b/src/routes/suggestions.ts index b15ff5f..a75657e 100644 --- a/src/routes/suggestions.ts +++ b/src/routes/suggestions.ts @@ -26,7 +26,7 @@ router.post('/', async (req, res) => { let llm: BaseChatModel | undefined; if (chatModels[provider] && chatModels[provider][chatModel]) { - llm = chatModels[provider][chatModel] as BaseChatModel | undefined; + llm = chatModels[provider][chatModel].model as BaseChatModel | undefined; } if (!llm) { diff --git a/src/routes/videos.ts b/src/routes/videos.ts index 0ffdb2c..9d43fd2 100644 --- a/src/routes/videos.ts +++ b/src/routes/videos.ts @@ -26,7 +26,7 @@ router.post('/', async (req, res) => { let llm: BaseChatModel | undefined; if (chatModels[provider] && chatModels[provider][chatModel]) { - llm = chatModels[provider][chatModel] as BaseChatModel | undefined; + llm = chatModels[provider][chatModel].model as BaseChatModel | undefined; } if (!llm) { diff --git a/src/websocket/connectionManager.ts b/src/websocket/connectionManager.ts index 70e20d9..04797c5 100644 --- a/src/websocket/connectionManager.ts +++ b/src/websocket/connectionManager.ts @@ -45,9 +45,8 @@ export const handleConnection = async ( chatModelProviders[chatModelProvider][chatModel] && chatModelProvider != 'custom_openai' ) { - llm = chatModelProviders[chatModelProvider][chatModel] as unknown as - | BaseChatModel - | undefined; + llm = chatModelProviders[chatModelProvider][chatModel] + .model as unknown as BaseChatModel | undefined; } else if (chatModelProvider == 'custom_openai') { llm = new ChatOpenAI({ modelName: chatModel, @@ -65,7 +64,7 @@ export const handleConnection = async ( ) { embeddings = embeddingModelProviders[embeddingModelProvider][ embeddingModel - ] as Embeddings | undefined; + ].model as Embeddings | undefined; } if (!llm || !embeddings) { diff --git a/ui/components/SearchVideos.tsx b/ui/components/SearchVideos.tsx index 74d4381..fec229c 100644 --- a/ui/components/SearchVideos.tsx +++ b/ui/components/SearchVideos.tsx @@ -64,7 +64,7 @@ const Searchvideos = ({ const data = await res.json(); - const videos = data.videos ?? []; + const videos = data.videos ?? []; setVideos(videos); setSlides( videos.map((video: Video) => { diff --git a/ui/components/SettingsDialog.tsx b/ui/components/SettingsDialog.tsx index 171e812..02358c5 100644 --- a/ui/components/SettingsDialog.tsx +++ b/ui/components/SettingsDialog.tsx @@ -49,10 +49,10 @@ export const Select = ({ className, options, ...restProps }: SelectProps) => { interface SettingsType { chatModelProviders: { - [key: string]: string[]; + [key: string]: [Record<string, any>]; }; embeddingModelProviders: { - [key: string]: string[]; + [key: string]: [Record<string, any>]; }; openaiApiKey: string; groqApiKey: string; @@ -68,6 +68,10 @@ const SettingsDialog = ({ setIsOpen: (isOpen: boolean) => void; }) => { const [config, setConfig] = useState<SettingsType | null>(null); + const [chatModels, setChatModels] = useState<Record<string, any>>({}); + const [embeddingModels, setEmbeddingModels] = useState<Record<string, any>>( + {}, + ); const [selectedChatModelProvider, setSelectedChatModelProvider] = useState< string | null >(null); @@ -118,7 +122,7 @@ const SettingsDialog = ({ const chatModel = localStorage.getItem('chatModel') || (data.chatModelProviders && - data.chatModelProviders[chatModelProvider]?.[0]) || + data.chatModelProviders[chatModelProvider]?.[0].name) || ''; const embeddingModelProvider = localStorage.getItem('embeddingModelProvider') || @@ -127,7 +131,7 @@ const SettingsDialog = ({ const embeddingModel = localStorage.getItem('embeddingModel') || (data.embeddingModelProviders && - data.embeddingModelProviders[embeddingModelProvider]?.[0]) || + data.embeddingModelProviders[embeddingModelProvider]?.[0].name) || ''; setSelectedChatModelProvider(chatModelProvider); @@ -136,6 +140,8 @@ const SettingsDialog = ({ setSelectedEmbeddingModel(embeddingModel); setCustomOpenAIApiKey(localStorage.getItem('openAIApiKey') || ''); setCustomOpenAIBaseURL(localStorage.getItem('openAIBaseURL') || ''); + setChatModels(data.chatModelProviders || {}); + setEmbeddingModels(data.embeddingModelProviders || {}); setIsLoading(false); }; @@ -229,7 +235,8 @@ const SettingsDialog = ({ setSelectedChatModel(''); } else { setSelectedChatModel( - config.chatModelProviders[e.target.value][0], + config.chatModelProviders[e.target.value][0] + .name, ); } }} @@ -264,8 +271,8 @@ const SettingsDialog = ({ return chatModelProvider ? chatModelProvider.length > 0 ? chatModelProvider.map((model) => ({ - value: model, - label: model, + value: model.name, + label: model.displayName, })) : [ { @@ -341,7 +348,8 @@ const SettingsDialog = ({ onChange={(e) => { setSelectedEmbeddingModelProvider(e.target.value); setSelectedEmbeddingModel( - config.embeddingModelProviders[e.target.value][0], + config.embeddingModelProviders[e.target.value][0] + .name, ); }} options={Object.keys( @@ -374,8 +382,8 @@ const SettingsDialog = ({ return embeddingModelProvider ? embeddingModelProvider.length > 0 ? embeddingModelProvider.map((model) => ({ - label: model, - value: model, + label: model.displayName, + value: model.name, })) : [ { From 2785cdd97a9e913d335f01eda6a5a7f5e6fe1f06 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 25 Sep 2024 15:27:48 +0530 Subject: [PATCH 020/115] feat(routes): add search route --- src/routes/index.ts | 2 + src/routes/search.ts | 150 ++++++++++++++++++++++++++++++++ src/websocket/messageHandler.ts | 2 +- 3 files changed, 153 insertions(+), 1 deletion(-) create mode 100644 src/routes/search.ts diff --git a/src/routes/index.ts b/src/routes/index.ts index af928ab..6e82e54 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -5,6 +5,7 @@ import configRouter from './config'; import modelsRouter from './models'; import suggestionsRouter from './suggestions'; import chatsRouter from './chats'; +import searchRouter from './search'; const router = express.Router(); @@ -14,5 +15,6 @@ router.use('/config', configRouter); router.use('/models', modelsRouter); router.use('/suggestions', suggestionsRouter); router.use('/chats', chatsRouter); +router.use('/search', searchRouter); export default router; diff --git a/src/routes/search.ts b/src/routes/search.ts new file mode 100644 index 0000000..8eb2490 --- /dev/null +++ b/src/routes/search.ts @@ -0,0 +1,150 @@ +import express from 'express'; +import logger from '../utils/logger'; +import { BaseChatModel } from 'langchain/chat_models/base'; +import { Embeddings } from 'langchain/embeddings/base'; +import { ChatOpenAI } from '@langchain/openai'; +import { + getAvailableChatModelProviders, + getAvailableEmbeddingModelProviders, +} from '../lib/providers'; +import { searchHandlers } from '../websocket/messageHandler'; +import { AIMessage, BaseMessage, HumanMessage } from '@langchain/core/messages'; + +const router = express.Router(); + +interface chatModel { + provider: string; + model: string; + customOpenAIBaseURL?: string; + customOpenAIKey?: string; +} + +interface embeddingModel { + provider: string; + model: string; +} + +interface RequestBody { + focusMode: string; + chatModel?: chatModel; + embeddingModel?: embeddingModel; + query: string; + history: Array<[string, string]>; +} + +router.post('/', async (req, res) => { + try { + const body: RequestBody = req.body; + + if (!body.focusMode || !body.query) { + return res.status(400).json({ message: 'Missing focus mode or query' }); + } + + body.history = body.history || []; + + const history: BaseMessage[] = body.history.map((msg) => { + if (msg[0] === 'human') { + return new HumanMessage({ + content: msg[1], + }); + } else { + return new AIMessage({ + content: msg[1], + }); + } + }); + + const [chatModelProviders, embeddingModelProviders] = await Promise.all([ + getAvailableChatModelProviders(), + getAvailableEmbeddingModelProviders(), + ]); + + const chatModelProvider = + body.chatModel?.provider || Object.keys(chatModelProviders)[0]; + const chatModel = + body.chatModel?.model || + Object.keys(chatModelProviders[chatModelProvider])[0]; + + const embeddingModelProvider = + body.embeddingModel?.provider || Object.keys(embeddingModelProviders)[0]; + const embeddingModel = + body.embeddingModel?.model || + Object.keys(embeddingModelProviders[embeddingModelProvider])[0]; + + let llm: BaseChatModel | undefined; + let embeddings: Embeddings | undefined; + + if (body.chatModel?.provider === 'custom_openai') { + if ( + !body.chatModel?.customOpenAIBaseURL || + !body.chatModel?.customOpenAIKey + ) { + return res + .status(400) + .json({ message: 'Missing custom OpenAI base URL or key' }); + } + + llm = new ChatOpenAI({ + modelName: body.chatModel.model, + openAIApiKey: body.chatModel.customOpenAIKey, + temperature: 0.7, + configuration: { + baseURL: body.chatModel.customOpenAIBaseURL, + }, + }) as unknown as BaseChatModel; + } else if ( + chatModelProviders[chatModelProvider] && + chatModelProviders[chatModelProvider][chatModel] + ) { + llm = chatModelProviders[chatModelProvider][chatModel] + .model as unknown as BaseChatModel | undefined; + } + + if ( + embeddingModelProviders[embeddingModelProvider] && + embeddingModelProviders[embeddingModelProvider][embeddingModel] + ) { + embeddings = embeddingModelProviders[embeddingModelProvider][ + embeddingModel + ].model as Embeddings | undefined; + } + + if (!llm || !embeddings) { + return res.status(400).json({ message: 'Invalid model selected' }); + } + + const searchHandler = searchHandlers[body.focusMode]; + + if (!searchHandler) { + return res.status(400).json({ message: 'Invalid focus mode' }); + } + + const emitter = searchHandler(body.query, history, llm, embeddings); + + let message = ''; + let sources = []; + + emitter.on('data', (data) => { + const parsedData = JSON.parse(data); + if (parsedData.type === 'response') { + message += parsedData.data; + } else if (parsedData.type === 'sources') { + sources = parsedData.data; + } + }); + + emitter.on('end', () => { + res.status(200).json({ message, sources }); + }); + + emitter.on('error', (data) => { + const parsedData = JSON.parse(data); + res.status(500).json({ message: parsedData.data }); + }); + } catch (err: any) { + logger.error(`Error in getting search results: ${err.message}`); + res.status(500).json({ message: 'An error has occurred.' }); + } +}); + +export default router; diff --git a/src/websocket/messageHandler.ts b/src/websocket/messageHandler.ts index 0afda9f..332910c 100644 --- a/src/websocket/messageHandler.ts +++ b/src/websocket/messageHandler.ts @@ -28,7 +28,7 @@ type WSMessage = { history: Array<[string, string]>; }; -const searchHandlers = { +export const searchHandlers = { webSearch: handleWebSearch, academicSearch: handleAcademicSearch, writingAssistant: handleWritingAssistant, From c52d6ac290dd22c7b3d762bb11448b100c8c919f Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 25 Sep 2024 16:54:07 +0530 Subject: [PATCH 021/115] feat(docs): add search API docs --- README.md | 9 ++++ docs/API/SEARCH.md | 105 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 docs/API/SEARCH.md diff --git a/README.md b/README.md index 3c87acc..38cc1c2 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ - [Non-Docker Installation](#non-docker-installation) - [Ollama Connection Errors](#ollama-connection-errors) - [Using as a Search Engine](#using-as-a-search-engine) +- [Using Perplexica's API](#using-perplexicas-api) - [One-Click Deployment](#one-click-deployment) - [Upcoming Features](#upcoming-features) - [Support Us](#support-us) @@ -45,6 +46,7 @@ Want to know more about its architecture and how it works? You can read it [here - **Wolfram Alpha Search Mode:** Answers queries that need calculations or data analysis using Wolfram Alpha. - **Reddit Search Mode:** Searches Reddit for discussions and opinions related to the query. - **Current Information:** Some search tools might give you outdated info because they use data from crawling bots and convert them into embeddings and store them in a index. Unlike them, Perplexica uses SearxNG, a metasearch engine to get the results and rerank and get the most relevant source out of it, ensuring you always get the latest information without the overhead of daily data updates. +- **API**: Integrate Perplexica into your existing applications and make use of its capibilities. It has many more features like image and video search. Some of the planned features are mentioned in [upcoming features](#upcoming-features). @@ -125,6 +127,12 @@ If you wish to use Perplexica as an alternative to traditional search engines li 3. Add a new site search with the following URL: `http://localhost:3000/?q=%s`. Replace `localhost` with your IP address or domain name, and `3000` with the port number if Perplexica is not hosted locally. 4. Click the add button. Now, you can use Perplexica directly from your browser's search bar. +## Using Perplexica's API + +Perplexica also provides an API for developers looking to integrate its powerful search engine into their own applications. You can run searches, customize models, and get results tailored to your needs. + +For more details, check out the full documentation [here](https://github.com/ItzCrazyKns/Perplexica/tree/master/docs/API/SEARCH.md). + ## One-Click Deployment [![Deploy to RepoCloud](https://d16t0pc4846x52.cloudfront.net/deploylobe.svg)](https://repocloud.io/details/?app_id=267) @@ -135,6 +143,7 @@ If you wish to use Perplexica as an alternative to traditional search engines li - [x] Adding support for local LLMs - [x] History Saving features - [x] Introducing various Focus Modes +- [x] Adding API support - [ ] Finalizing Copilot Mode - [ ] Adding Discover diff --git a/docs/API/SEARCH.md b/docs/API/SEARCH.md new file mode 100644 index 0000000..d3391c9 --- /dev/null +++ b/docs/API/SEARCH.md @@ -0,0 +1,105 @@ +# Perplexica Search API Documentation + +## Overview + +Perplexica’s Search API makes it easy to use our AI-powered search engine. You can run different types of searches, pick the models you want to use, and get the most recent info. Follow the following headings to learn more about Perplexica's search API. + +## Endpoint + +### **POST** `/api/search` + +### Request + +The API accepts a JSON object in the request body, where you define the focus mode, chat models, embedding models, and your query. + +#### Request Body Structure + +```json +{ + "chatModel": { + "provider": "openai", + "model": "gpt-4o-mini" + }, + "embeddingModel": { + "provider": "openai", + "model": "text-embedding-3-large" + }, + "focusMode": "webSearch", + "query": "What is Perplexica", + "history": [] +} +``` + +### Request Parameters + +- **`chatModel`** (object, optional): Defines the chat model to be used for the query. + + - `provider`: Specifies the provider for the chat model (e.g., `openai`, `ollama`). + - `model`: The specific model from the chosen provider (e.g., `gpt-4o-mini`). + - Optional fields for custom OpenAI configuration: + - `customOpenAIBaseURL`: If you’re using a custom OpenAI instance, provide the base URL. + - `customOpenAIKey`: The API key for a custom OpenAI instance. + +- **`embeddingModel`** (object, optional): Defines the embedding model for similarity-based searching. + + - `provider`: The provider for the embedding model (e.g., `openai`). + - `model`: The specific embedding model (e.g., `text-embedding-3-large`). + +- **`focusMode`** (string, required): Specifies which focus mode to use. Available modes: + + - `webSearch`, `academicSearch`, `writingAssistant`, `wolframAlphaSearch`, `youtubeSearch`, `redditSearch`. + +- **`query`** (string, required): The search query or question. + +- **`history`** (array, optional): An array of message pairs representing the conversation history. Each pair consists of a role (either 'human' or 'assistant') and the message content. This allows the system to use the context of the conversation to refine results. Example: + ```json + [ + ["human", "What is Perplexica?"], + ["assistant", "Perplexica is an AI-powered search engine..."] + ] + ``` + +### Response + +The response from the API includes both the final message and the sources used to generate that message. + +#### Example Response + +```json +{ + "message": "Perplexica is an innovative, open-source AI-powered search engine designed to enhance the way users search for information online. Here are some key features and characteristics of Perplexica:\n\n- **AI-Powered Technology**: It utilizes advanced machine learning algorithms to not only retrieve information but also to understand the context and intent behind user queries, providing more relevant results [1][5].\n\n- **Open-Source**: Being open-source, Perplexica offers flexibility and transparency, allowing users to explore its functionalities without the constraints of proprietary software [3][10].", + "sources": [ + { + "pageContent": "Perplexica is an innovative, open-source AI-powered search engine designed to enhance the way users search for information online.", + "metadata": { + "title": "What is Perplexica, and how does it function as an AI-powered search ...", + "url": "https://askai.glarity.app/search/What-is-Perplexica--and-how-does-it-function-as-an-AI-powered-search-engine" + } + }, + { + "pageContent": "Perplexica is an open-source AI-powered search tool that dives deep into the internet to find precise answers.", + "metadata": { + "title": "Sahar Mor's Post", + "url": "https://www.linkedin.com/posts/sahar-mor_a-new-open-source-project-called-perplexica-activity-7204489745668694016-ncja" + } + } + .... + ] +} +``` + +### Fields in the Response + +- **`message`** (string): The search result, generated based on the query and focus mode. +- **`sources`** (array): A list of sources that were used to generate the search result. Each source includes: + - `pageContent`: A snippet of the relevant content from the source. + - `metadata`: Metadata about the source, including: + - `title`: The title of the webpage. + - `url`: The URL of the webpage. + +### Error Handling + +If an error occurs during the search process, the API will return an appropriate error message with an HTTP status code. + +- **400**: If the request is malformed or missing required fields (e.g., no focus mode or query). +- **500**: If an internal server error occurs during the search. From ead2d98a9fb4eaf80fe126e004e86f7263b9afdc Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 25 Sep 2024 16:54:19 +0530 Subject: [PATCH 022/115] feat(search): update types --- src/routes/search.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/search.ts b/src/routes/search.ts index 8eb2490..9eec29f 100644 --- a/src/routes/search.ts +++ b/src/routes/search.ts @@ -24,7 +24,7 @@ interface embeddingModel { model: string; } -interface RequestBody { +interface ChatRequestBody { focusMode: string; chatModel?: chatModel; embeddingModel?: embeddingModel; @@ -34,7 +34,7 @@ interface RequestBody { router.post('/', async (req, res) => { try { - const body: RequestBody = req.body; + const body: ChatRequestBody = req.body; if (!body.focusMode || !body.query) { return res.status(400).json({ message: 'Missing focus mode or query' }); From 1cfa3398a3f2bfdb5fa9129a5d3115a97cdc813a Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 25 Sep 2024 16:54:44 +0530 Subject: [PATCH 023/115] feat(package): bump version --- package.json | 2 +- ui/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index c09454c..ab45174 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "perplexica-backend", - "version": "1.9.0-rc2", + "version": "1.9.0-rc3", "license": "MIT", "author": "ItzCrazyKns", "scripts": { diff --git a/ui/package.json b/ui/package.json index 23afda2..04512b6 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,6 +1,6 @@ { "name": "perplexica-frontend", - "version": "1.9.0-rc2", + "version": "1.9.0-rc3", "license": "MIT", "author": "ItzCrazyKns", "scripts": { From a0aad69f62d3ac4c210e11e6aeb09c952fe8c219 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 25 Sep 2024 16:56:41 +0530 Subject: [PATCH 024/115] feat(readme): update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 38cc1c2..f66e8b1 100644 --- a/README.md +++ b/README.md @@ -129,7 +129,7 @@ If you wish to use Perplexica as an alternative to traditional search engines li ## Using Perplexica's API -Perplexica also provides an API for developers looking to integrate its powerful search engine into their own applications. You can run searches, customize models, and get results tailored to your needs. +Perplexica also provides an API for developers looking to integrate its powerful search engine into their own applications. You can run searches, use multiple models and get answers to your queries. For more details, check out the full documentation [here](https://github.com/ItzCrazyKns/Perplexica/tree/master/docs/API/SEARCH.md). From 15203c123dff84685d5a9c57286bf35e7462f452 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 25 Sep 2024 17:49:16 +0530 Subject: [PATCH 025/115] feat(docs): update search docs --- docs/API/SEARCH.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/API/SEARCH.md b/docs/API/SEARCH.md index d3391c9..714cbd8 100644 --- a/docs/API/SEARCH.md +++ b/docs/API/SEARCH.md @@ -6,7 +6,9 @@ Perplexica’s Search API makes it easy to use our AI-powered search engine. You ## Endpoint -### **POST** `/api/search` +### **POST** `http://localhost:3001/api/search` + +**Note**: Replace `3001` with any other port if you've changed the default PORT ### Request From 8902abdcee7a1f7fe964381f7afb9e31acfb6136 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 25 Sep 2024 17:54:35 +0530 Subject: [PATCH 026/115] Update SEARCH.md --- docs/API/SEARCH.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/API/SEARCH.md b/docs/API/SEARCH.md index 714cbd8..56d34ce 100644 --- a/docs/API/SEARCH.md +++ b/docs/API/SEARCH.md @@ -28,7 +28,10 @@ The API accepts a JSON object in the request body, where you define the focus mo }, "focusMode": "webSearch", "query": "What is Perplexica", - "history": [] + "history": [ + ["human", "Hi, how are you?"], + ["assistant", "I am doing well, how can I help you today?"] + ] } ``` From e3488366c16ded6e8d60d3b77eb3ff2860db6026 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 25 Sep 2024 17:56:19 +0530 Subject: [PATCH 027/115] Update SEARCH.md --- docs/API/SEARCH.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/API/SEARCH.md b/docs/API/SEARCH.md index 56d34ce..996a88b 100644 --- a/docs/API/SEARCH.md +++ b/docs/API/SEARCH.md @@ -37,7 +37,7 @@ The API accepts a JSON object in the request body, where you define the focus mo ### Request Parameters -- **`chatModel`** (object, optional): Defines the chat model to be used for the query. +- **`chatModel`** (object, optional): Defines the chat model to be used for the query. For model details you can send a GET request at `http://localhost:3001/api/models`. - `provider`: Specifies the provider for the chat model (e.g., `openai`, `ollama`). - `model`: The specific model from the chosen provider (e.g., `gpt-4o-mini`). @@ -45,7 +45,8 @@ The API accepts a JSON object in the request body, where you define the focus mo - `customOpenAIBaseURL`: If you’re using a custom OpenAI instance, provide the base URL. - `customOpenAIKey`: The API key for a custom OpenAI instance. -- **`embeddingModel`** (object, optional): Defines the embedding model for similarity-based searching. +- **`embeddingModel`** (object, optional): Defines the embedding model for similarity-based searching. For model details you can send a GET request at `http://localhost:3001/api/models`. + - `provider`: The provider for the embedding model (e.g., `openai`). - `model`: The specific embedding model (e.g., `text-embedding-3-large`). From 425a08432b29b96ed50378af0f87cba8272f1e03 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 26 Sep 2024 21:37:05 +0530 Subject: [PATCH 028/115] feat(groq): add Llama 3.2 --- src/lib/providers/groq.ts | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/lib/providers/groq.ts b/src/lib/providers/groq.ts index 6249267..69db4f7 100644 --- a/src/lib/providers/groq.ts +++ b/src/lib/providers/groq.ts @@ -9,6 +9,45 @@ export const loadGroqChatModels = async () => { try { const chatModels = { + 'llama-3.2-3b-preview': { + displayName: 'Llama 3.2 3B', + model: new ChatOpenAI( + { + openAIApiKey: groqApiKey, + modelName: 'llama-3.2-3b-preview', + temperature: 0.7, + }, + { + baseURL: 'https://api.groq.com/openai/v1', + }, + ), + }, + 'llama-3.2-11b-text-preview': { + displayName: 'Llama 3.2 11B Text', + model: new ChatOpenAI( + { + openAIApiKey: groqApiKey, + modelName: 'llama-3.2-11b-text-preview', + temperature: 0.7, + }, + { + baseURL: 'https://api.groq.com/openai/v1', + }, + ), + }, + 'llama-3.2-90b-text-preview': { + displayName: 'Llama 3.2 90B Text', + model: new ChatOpenAI( + { + openAIApiKey: groqApiKey, + modelName: 'llama-3.2-90b-text-preview', + temperature: 0.7, + }, + { + baseURL: 'https://api.groq.com/openai/v1', + }, + ), + }, 'llama-3.1-70b-versatile': { displayName: 'Llama 3.1 70B', model: new ChatOpenAI( From fc5e35b1b10c3e05303a457e64c9f84404dba748 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 2 Oct 2024 21:59:40 +0530 Subject: [PATCH 029/115] feat(docker): add prebuilt images --- .github/workflows/docker-build.yaml | 46 +++++++++++++++++++++++++++++ backend.dockerfile | 1 - docker-compose.yaml | 2 ++ 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/docker-build.yaml diff --git a/.github/workflows/docker-build.yaml b/.github/workflows/docker-build.yaml new file mode 100644 index 0000000..90ccbe4 --- /dev/null +++ b/.github/workflows/docker-build.yaml @@ -0,0 +1,46 @@ +name: Build & Push Docker Image + +on: + push: + branches: + - main + release: + types: [published] + +jobs: + build-and-push: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Log in to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Extract version from release tag + if: github.event_name == 'release' + id: version + run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV + + - name: Build and push Docker image + if: github.ref == 'refs/heads/main' && github.event_name == 'push' + run: | + docker build -f backend.dockerfile -t itzcrazykns1337/perplexica-backend:main . + docker build -f app.dockerfile -t itzcrazykns1337/perplexica-frontend:main . + docker push itzcrazykns1337/perplexica-backend:main + docker push itzcrazykns1337/perplexica-frontend:main + + - name: Build and push release Docker image + if: github.event_name == 'release' + run: | + docker build -f backend.dockerfile -t itzcrazykns1337/perplexica-backend:${{ env.RELEASE_VERSION }} . + docker build -f app.dockerfile -t itzcrazykns1337/perplexica-frontend:${{ env.RELEASE_VERSION }} . + docker push itzcrazykns1337/perplexica-backend:${{ env.RELEASE_VERSION }} + docker push itzcrazykns1337/perplexica-frontend:${{ env.RELEASE_VERSION }} \ No newline at end of file diff --git a/backend.dockerfile b/backend.dockerfile index 0169218..66de9dc 100644 --- a/backend.dockerfile +++ b/backend.dockerfile @@ -7,7 +7,6 @@ WORKDIR /home/perplexica COPY src /home/perplexica/src COPY tsconfig.json /home/perplexica/ -COPY config.toml /home/perplexica/ COPY drizzle.config.ts /home/perplexica/ COPY package.json /home/perplexica/ COPY yarn.lock /home/perplexica/ diff --git a/docker-compose.yaml b/docker-compose.yaml index d3892e5..ad61ec2 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -15,6 +15,7 @@ services: dockerfile: backend.dockerfile args: - SEARXNG_API_URL=http://searxng:8080 + image: itzcrazykns1337/perplexica-backend:main depends_on: - searxng ports: @@ -35,6 +36,7 @@ services: args: - NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api - NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001 + image: itzcrazykns1337/perplexica-frontend:main depends_on: - perplexica-backend ports: From dcfe43ebda6b46b83eda33d2f8b049901d80df3e Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 2 Oct 2024 22:00:04 +0530 Subject: [PATCH 030/115] trigger build --- docs/API/SEARCH.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/API/SEARCH.md b/docs/API/SEARCH.md index 996a88b..a573021 100644 --- a/docs/API/SEARCH.md +++ b/docs/API/SEARCH.md @@ -47,7 +47,6 @@ The API accepts a JSON object in the request body, where you define the focus mo - **`embeddingModel`** (object, optional): Defines the embedding model for similarity-based searching. For model details you can send a GET request at `http://localhost:3001/api/models`. - - `provider`: The provider for the embedding model (e.g., `openai`). - `model`: The specific embedding model (e.g., `text-embedding-3-large`). From 4bba674134d2acce0d6a3d7f577125215a440546 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 2 Oct 2024 22:00:46 +0530 Subject: [PATCH 031/115] feat(build-workflow): update branch --- .github/workflows/docker-build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-build.yaml b/.github/workflows/docker-build.yaml index 90ccbe4..ac855e1 100644 --- a/.github/workflows/docker-build.yaml +++ b/.github/workflows/docker-build.yaml @@ -3,7 +3,7 @@ name: Build & Push Docker Image on: push: branches: - - main + - master release: types: [published] From 1aaf172246e3900dc44ecfa0f8f34ce0a07893ed Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 2 Oct 2024 22:01:49 +0530 Subject: [PATCH 032/115] feat(build-workflow): update head --- .github/workflows/docker-build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-build.yaml b/.github/workflows/docker-build.yaml index ac855e1..6bf2c64 100644 --- a/.github/workflows/docker-build.yaml +++ b/.github/workflows/docker-build.yaml @@ -30,7 +30,7 @@ jobs: run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV - name: Build and push Docker image - if: github.ref == 'refs/heads/main' && github.event_name == 'push' + if: github.ref == 'refs/heads/master' && github.event_name == 'push' run: | docker build -f backend.dockerfile -t itzcrazykns1337/perplexica-backend:main . docker build -f app.dockerfile -t itzcrazykns1337/perplexica-frontend:main . From c233362e70aebf04fdfbb2da67e612ecc421ede3 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 2 Oct 2024 22:53:45 +0530 Subject: [PATCH 033/115] feat(dockerfile): specify default args --- .gitignore | 3 ++- app.dockerfile | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index a3dd5cc..8391d19 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,5 @@ logs/ Thumbs.db # Db -db.sqlite \ No newline at end of file +db.sqlite +/searxng diff --git a/app.dockerfile b/app.dockerfile index 105cf86..8337171 100644 --- a/app.dockerfile +++ b/app.dockerfile @@ -1,7 +1,7 @@ FROM node:alpine -ARG NEXT_PUBLIC_WS_URL -ARG NEXT_PUBLIC_API_URL +ARG NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001 +ARG NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api ENV NEXT_PUBLIC_WS_URL=${NEXT_PUBLIC_WS_URL} ENV NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL} From 9f88d16ef1dbbc3100f6fa76dd7538ea6da04383 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 2 Oct 2024 22:54:00 +0530 Subject: [PATCH 034/115] feat(docker-compose): use env vars from compose --- backend.dockerfile | 3 --- docker-compose.yaml | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/backend.dockerfile b/backend.dockerfile index 66de9dc..70c30e8 100644 --- a/backend.dockerfile +++ b/backend.dockerfile @@ -1,8 +1,5 @@ FROM node:slim -ARG SEARXNG_API_URL -ENV SEARXNG_API_URL=${SEARXNG_API_URL} - WORKDIR /home/perplexica COPY src /home/perplexica/src diff --git a/docker-compose.yaml b/docker-compose.yaml index ad61ec2..46d82c6 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -13,9 +13,9 @@ services: build: context: . dockerfile: backend.dockerfile - args: - - SEARXNG_API_URL=http://searxng:8080 image: itzcrazykns1337/perplexica-backend:main + environment: + - SEARXNG_API_URL=http://searxng:8080 depends_on: - searxng ports: From ae3fc5f80285b34d7e289498a9f6e1c61bef20aa Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 2 Oct 2024 22:54:16 +0530 Subject: [PATCH 035/115] feat(docs): modify updating docs --- docs/installation/UPDATING.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/docs/installation/UPDATING.md b/docs/installation/UPDATING.md index df67775..031a3e8 100644 --- a/docs/installation/UPDATING.md +++ b/docs/installation/UPDATING.md @@ -10,15 +10,21 @@ To update Perplexica to the latest version, follow these steps: git clone https://github.com/ItzCrazyKns/Perplexica.git ``` -2. Navigate to the Project Directory +2. Navigate to the Project Directory. -3. Update and Rebuild Docker Containers: +3. Pull latest images from registry. ```bash -docker compose up -d --build +docker compose pull ``` -4. Once the command completes running go to http://localhost:3000 and verify the latest changes. +4. Update and Recreate containers. + +```bash +docker compose up -d +``` + +5. Once the command completes running go to http://localhost:3000 and verify the latest changes. ## For non Docker users From 66f1e19ce88eaf167f09f66bbd196eaa89a9ffa5 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 3 Oct 2024 09:37:15 +0530 Subject: [PATCH 036/115] feat(image-build): use Docker buildx, publish multi arch images --- .github/workflows/docker-build.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/docker-build.yaml b/.github/workflows/docker-build.yaml index 6bf2c64..63210ff 100644 --- a/.github/workflows/docker-build.yaml +++ b/.github/workflows/docker-build.yaml @@ -17,6 +17,8 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 + with: + install: true - name: Log in to DockerHub uses: docker/login-action@v2 @@ -32,15 +34,13 @@ jobs: - name: Build and push Docker image if: github.ref == 'refs/heads/master' && github.event_name == 'push' run: | - docker build -f backend.dockerfile -t itzcrazykns1337/perplexica-backend:main . - docker build -f app.dockerfile -t itzcrazykns1337/perplexica-frontend:main . - docker push itzcrazykns1337/perplexica-backend:main - docker push itzcrazykns1337/perplexica-frontend:main + docker buildx create --use + docker buildx build --platform linux/amd64,linux/arm64 -f backend.dockerfile -t itzcrazykns1337/perplexica-backend:main --push . + docker buildx build --platform linux/amd64,linux/arm64 -f app.dockerfile -t itzcrazykns1337/perplexica-frontend:main --push . - name: Build and push release Docker image if: github.event_name == 'release' run: | - docker build -f backend.dockerfile -t itzcrazykns1337/perplexica-backend:${{ env.RELEASE_VERSION }} . - docker build -f app.dockerfile -t itzcrazykns1337/perplexica-frontend:${{ env.RELEASE_VERSION }} . - docker push itzcrazykns1337/perplexica-backend:${{ env.RELEASE_VERSION }} - docker push itzcrazykns1337/perplexica-frontend:${{ env.RELEASE_VERSION }} \ No newline at end of file + docker buildx create --use + docker buildx build --platform linux/amd64,linux/arm64 -f backend.dockerfile -t itzcrazykns1337/perplexica-backend:${{ env.RELEASE_VERSION }} --push . + docker buildx build --platform linux/amd64,linux/arm64 -f app.dockerfile -t itzcrazykns1337/perplexica-frontend:${{ env.RELEASE_VERSION }} --push . \ No newline at end of file From 1680a1786e7e81122c36743d580a4caafe19612e Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 3 Oct 2024 10:41:05 +0530 Subject: [PATCH 037/115] feat(image-build): improve build time by caching --- .github/workflows/docker-build.yaml | 40 +++++++++++++++++++++++------ app.dockerfile | 2 +- backend.dockerfile | 2 +- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/.github/workflows/docker-build.yaml b/.github/workflows/docker-build.yaml index 63210ff..3cd9044 100644 --- a/.github/workflows/docker-build.yaml +++ b/.github/workflows/docker-build.yaml @@ -1,4 +1,4 @@ -name: Build & Push Docker Image +name: Build & Push Docker Images on: push: @@ -10,7 +10,9 @@ on: jobs: build-and-push: runs-on: ubuntu-latest - + strategy: + matrix: + service: [backend, app] steps: - name: Checkout code uses: actions/checkout@v3 @@ -31,16 +33,38 @@ jobs: id: version run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV - - name: Build and push Docker image + - name: Build and push Docker image for ${{ matrix.service }} if: github.ref == 'refs/heads/master' && github.event_name == 'push' run: | docker buildx create --use - docker buildx build --platform linux/amd64,linux/arm64 -f backend.dockerfile -t itzcrazykns1337/perplexica-backend:main --push . - docker buildx build --platform linux/amd64,linux/arm64 -f app.dockerfile -t itzcrazykns1337/perplexica-frontend:main --push . + if [[ "${{ matrix.service }}" == "backend" ]]; then \ + DOCKERFILE=backend.dockerfile; \ + IMAGE_NAME=perplexica-backend; \ + else \ + DOCKERFILE=app.dockerfile; \ + IMAGE_NAME=perplexica-frontend; \ + fi + docker buildx build --platform linux/amd64,linux/arm64 \ + --cache-from=type=registry,ref=itzcrazykns1337/${IMAGE_NAME}:main \ + --cache-to=type=inline \ + -f $DOCKERFILE \ + -t itzcrazykns1337/${IMAGE_NAME}:main \ + --push . - - name: Build and push release Docker image + - name: Build and push release Docker image for ${{ matrix.service }} if: github.event_name == 'release' run: | docker buildx create --use - docker buildx build --platform linux/amd64,linux/arm64 -f backend.dockerfile -t itzcrazykns1337/perplexica-backend:${{ env.RELEASE_VERSION }} --push . - docker buildx build --platform linux/amd64,linux/arm64 -f app.dockerfile -t itzcrazykns1337/perplexica-frontend:${{ env.RELEASE_VERSION }} --push . \ No newline at end of file + if [[ "${{ matrix.service }}" == "backend" ]]; then \ + DOCKERFILE=backend.dockerfile; \ + IMAGE_NAME=perplexica-backend; \ + else \ + DOCKERFILE=app.dockerfile; \ + IMAGE_NAME=perplexica-frontend; \ + fi + docker buildx build --platform linux/amd64,linux/arm64 \ + --cache-from=type=registry,ref=itzcrazykns1337/${IMAGE_NAME}:${{ env.RELEASE_VERSION }} \ + --cache-to=type=inline \ + -f $DOCKERFILE \ + -t itzcrazykns1337/${IMAGE_NAME}:${{ env.RELEASE_VERSION }} \ + --push . diff --git a/app.dockerfile b/app.dockerfile index 8337171..ff1824d 100644 --- a/app.dockerfile +++ b/app.dockerfile @@ -9,7 +9,7 @@ WORKDIR /home/perplexica COPY ui /home/perplexica/ -RUN yarn install +RUN yarn install --frozen-lockfile RUN yarn build CMD ["yarn", "start"] \ No newline at end of file diff --git a/backend.dockerfile b/backend.dockerfile index 70c30e8..b8d0155 100644 --- a/backend.dockerfile +++ b/backend.dockerfile @@ -10,7 +10,7 @@ COPY yarn.lock /home/perplexica/ RUN mkdir /home/perplexica/data -RUN yarn install +RUN yarn install --frozen-lockfile RUN yarn build CMD ["yarn", "start"] \ No newline at end of file From 877735b8529d23e9120c1bb72737ca193996ec6d Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 11 Oct 2024 10:35:33 +0530 Subject: [PATCH 038/115] feat(package): update `headlessui` --- ui/components/DeleteChat.tsx | 30 +++-- ui/components/MessageInputActions/Focus.tsx | 25 ++-- ui/components/MessageSources.tsx | 20 ++- ui/components/SettingsDialog.tsx | 24 ++-- ui/package.json | 2 +- ui/yarn.lock | 138 +++++++++++++++++--- 6 files changed, 185 insertions(+), 54 deletions(-) diff --git a/ui/components/DeleteChat.tsx b/ui/components/DeleteChat.tsx index 165f86e..f981e32 100644 --- a/ui/components/DeleteChat.tsx +++ b/ui/components/DeleteChat.tsx @@ -1,5 +1,13 @@ -import { Delete, Trash } from 'lucide-react'; -import { Dialog, Transition } from '@headlessui/react'; +import { Trash } from 'lucide-react'; +import { + Description, + Dialog, + DialogBackdrop, + DialogPanel, + DialogTitle, + Transition, + TransitionChild, +} from '@headlessui/react'; import { Fragment, useState } from 'react'; import { toast } from 'sonner'; import { Chat } from '@/app/library/page'; @@ -64,10 +72,10 @@ const DeleteChat = ({ } }} > - <Dialog.Backdrop className="fixed inset-0 bg-black/30" /> + <DialogBackdrop className="fixed inset-0 bg-black/30" /> <div className="fixed inset-0 overflow-y-auto"> <div className="flex min-h-full items-center justify-center p-4 text-center"> - <Transition.Child + <TransitionChild as={Fragment} enter="ease-out duration-200" enterFrom="opacity-0 scale-95" @@ -76,13 +84,13 @@ const DeleteChat = ({ leaveFrom="opacity-100 scale-200" leaveTo="opacity-0 scale-95" > - <Dialog.Panel className="w-full max-w-md transform rounded-2xl bg-light-secondary dark:bg-dark-secondary border border-light-200 dark:border-dark-200 p-6 text-left align-middle shadow-xl transition-all"> - <Dialog.Title className="text-lg font-medium leading-6 dark:text-white"> + <DialogPanel className="w-full max-w-md transform rounded-2xl bg-light-secondary dark:bg-dark-secondary border border-light-200 dark:border-dark-200 p-6 text-left align-middle shadow-xl transition-all"> + <DialogTitle className="text-lg font-medium leading-6 dark:text-white"> Delete Confirmation - </Dialog.Title> - <Dialog.Description className="text-sm dark:text-white/70 text-black/70"> + </DialogTitle> + <Description className="text-sm dark:text-white/70 text-black/70"> Are you sure you want to delete this chat? - </Dialog.Description> + </Description> <div className="flex flex-row items-end justify-end space-x-4 mt-6"> <button onClick={() => { @@ -101,8 +109,8 @@ const DeleteChat = ({ Delete </button> </div> - </Dialog.Panel> - </Transition.Child> + </DialogPanel> + </TransitionChild> </div> </div> </Dialog> diff --git a/ui/components/MessageInputActions/Focus.tsx b/ui/components/MessageInputActions/Focus.tsx index 86fca44..e471630 100644 --- a/ui/components/MessageInputActions/Focus.tsx +++ b/ui/components/MessageInputActions/Focus.tsx @@ -7,7 +7,12 @@ import { SwatchBook, } from 'lucide-react'; import { cn } from '@/lib/utils'; -import { Popover, Transition } from '@headlessui/react'; +import { + Popover, + PopoverButton, + PopoverPanel, + Transition, +} from '@headlessui/react'; import { SiReddit, SiYoutube } from '@icons-pack/react-simple-icons'; import { Fragment } from 'react'; @@ -70,10 +75,10 @@ const Focus = ({ setFocusMode: (mode: string) => void; }) => { return ( - <Popover className="fixed w-full max-w-[15rem] md:max-w-md lg:max-w-lg"> - <Popover.Button + <Popover className="relative w-full max-w-[15rem] md:max-w-md lg:max-w-lg"> + <PopoverButton type="button" - className="p-2 text-black/50 dark:text-white/50 rounded-xl hover:bg-light-secondary dark:hover:bg-dark-secondary active:scale-95 transition duration-200 hover:text-black dark:hover:text-white" + className=" text-black/50 dark:text-white/50 rounded-xl hover:bg-light-secondary dark:hover:bg-dark-secondary active:scale-95 transition duration-200 hover:text-black dark:hover:text-white" > {focusMode !== 'webSearch' ? ( <div className="flex flex-row items-center space-x-1"> @@ -86,7 +91,7 @@ const Focus = ({ ) : ( <ScanEye /> )} - </Popover.Button> + </PopoverButton> <Transition as={Fragment} enter="transition ease-out duration-150" @@ -96,10 +101,10 @@ const Focus = ({ leaveFrom="opacity-100 translate-y-0" leaveTo="opacity-0 translate-y-1" > - <Popover.Panel className="absolute z-10 w-full"> - <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-1 bg-light-primary dark:bg-dark-primary border rounded-lg border-light-200 dark:border-dark-200 w-full p-2 max-h-[200px] md:max-h-none overflow-y-auto"> + <PopoverPanel className="absolute z-10 w-64 md:w-[500px] left-0"> + <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-2 bg-light-primary dark:bg-dark-primary border rounded-lg border-light-200 dark:border-dark-200 w-full p-4 max-h-[200px] md:max-h-none overflow-y-auto"> {focusModes.map((mode, i) => ( - <Popover.Button + <PopoverButton onClick={() => setFocusMode(mode.key)} key={i} className={cn( @@ -123,10 +128,10 @@ const Focus = ({ <p className="text-black/70 dark:text-white/70 text-xs"> {mode.description} </p> - </Popover.Button> + </PopoverButton> ))} </div> - </Popover.Panel> + </PopoverPanel> </Transition> </Popover> ); diff --git a/ui/components/MessageSources.tsx b/ui/components/MessageSources.tsx index 71eebf8..e9cc1ba 100644 --- a/ui/components/MessageSources.tsx +++ b/ui/components/MessageSources.tsx @@ -1,5 +1,11 @@ /* eslint-disable @next/next/no-img-element */ -import { Dialog, Transition } from '@headlessui/react'; +import { + Dialog, + DialogPanel, + DialogTitle, + Transition, + TransitionChild, +} from '@headlessui/react'; import { Document } from '@langchain/core/documents'; import { Fragment, useState } from 'react'; @@ -74,7 +80,7 @@ const MessageSources = ({ sources }: { sources: Document[] }) => { <Dialog as="div" className="relative z-50" onClose={closeModal}> <div className="fixed inset-0 overflow-y-auto"> <div className="flex min-h-full items-center justify-center p-4 text-center"> - <Transition.Child + <TransitionChild as={Fragment} enter="ease-out duration-200" enterFrom="opacity-0 scale-95" @@ -83,10 +89,10 @@ const MessageSources = ({ sources }: { sources: Document[] }) => { leaveFrom="opacity-100 scale-200" leaveTo="opacity-0 scale-95" > - <Dialog.Panel className="w-full max-w-md transform rounded-2xl bg-light-secondary dark:bg-dark-secondary border border-light-200 dark:border-dark-200 p-6 text-left align-middle shadow-xl transition-all"> - <Dialog.Title className="text-lg font-medium leading-6 dark:text-white"> + <DialogPanel className="w-full max-w-md transform rounded-2xl bg-light-secondary dark:bg-dark-secondary border border-light-200 dark:border-dark-200 p-6 text-left align-middle shadow-xl transition-all"> + <DialogTitle className="text-lg font-medium leading-6 dark:text-white"> Sources - </Dialog.Title> + </DialogTitle> <div className="grid grid-cols-2 gap-2 overflow-auto max-h-[300px] mt-2 pr-2"> {sources.map((source, i) => ( <a @@ -122,8 +128,8 @@ const MessageSources = ({ sources }: { sources: Document[] }) => { </a> ))} </div> - </Dialog.Panel> - </Transition.Child> + </DialogPanel> + </TransitionChild> </div> </div> </Dialog> diff --git a/ui/components/SettingsDialog.tsx b/ui/components/SettingsDialog.tsx index 02358c5..34ef26c 100644 --- a/ui/components/SettingsDialog.tsx +++ b/ui/components/SettingsDialog.tsx @@ -1,5 +1,11 @@ import { cn } from '@/lib/utils'; -import { Dialog, Transition } from '@headlessui/react'; +import { + Dialog, + DialogPanel, + DialogTitle, + Transition, + TransitionChild, +} from '@headlessui/react'; import { CloudUpload, RefreshCcw, RefreshCw } from 'lucide-react'; import React, { Fragment, @@ -188,7 +194,7 @@ const SettingsDialog = ({ className="relative z-50" onClose={() => setIsOpen(false)} > - <Transition.Child + <TransitionChild as={Fragment} enter="ease-out duration-300" enterFrom="opacity-0" @@ -198,10 +204,10 @@ const SettingsDialog = ({ leaveTo="opacity-0" > <div className="fixed inset-0 bg-white/50 dark:bg-black/50" /> - </Transition.Child> + </TransitionChild> <div className="fixed inset-0 overflow-y-auto"> <div className="flex min-h-full items-center justify-center p-4 text-center"> - <Transition.Child + <TransitionChild as={Fragment} enter="ease-out duration-200" enterFrom="opacity-0 scale-95" @@ -210,10 +216,10 @@ const SettingsDialog = ({ leaveFrom="opacity-100 scale-200" leaveTo="opacity-0 scale-95" > - <Dialog.Panel className="w-full max-w-md transform rounded-2xl bg-light-secondary dark:bg-dark-secondary border border-light-200 dark:border-dark-200 p-6 text-left align-middle shadow-xl transition-all"> - <Dialog.Title className="text-xl font-medium leading-6 dark:text-white"> + <DialogPanel className="w-full max-w-md transform rounded-2xl bg-light-secondary dark:bg-dark-secondary border border-light-200 dark:border-dark-200 p-6 text-left align-middle shadow-xl transition-all"> + <DialogTitle className="text-xl font-medium leading-6 dark:text-white"> Settings - </Dialog.Title> + </DialogTitle> {config && !isLoading && ( <div className="flex flex-col space-y-4 mt-6"> <div className="flex flex-col space-y-1"> @@ -491,8 +497,8 @@ const SettingsDialog = ({ )} </button> </div> - </Dialog.Panel> - </Transition.Child> + </DialogPanel> + </TransitionChild> </div> </div> </Dialog> diff --git a/ui/package.json b/ui/package.json index 04512b6..e5dc677 100644 --- a/ui/package.json +++ b/ui/package.json @@ -11,7 +11,7 @@ "format:write": "prettier . --write" }, "dependencies": { - "@headlessui/react": "^1.7.18", + "@headlessui/react": "^2.1.9", "@icons-pack/react-simple-icons": "^9.4.0", "@langchain/openai": "^0.0.25", "@tailwindcss/typography": "^0.5.12", diff --git a/ui/yarn.lock b/ui/yarn.lock index d348a8c..fad2596 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -66,13 +66,51 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== -"@headlessui/react@^1.7.18": - version "1.7.18" - resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.7.18.tgz#30af4634d2215b2ca1aa29d07f33d02bea82d9d7" - integrity sha512-4i5DOrzwN4qSgNsL4Si61VMkUcWbcSKueUV7sFhpHzQcSShdlHENE5+QBntMSRvHt8NyoFO2AGG8si9lq+w4zQ== +"@floating-ui/core@^1.6.0": + version "1.6.8" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.8.tgz#aa43561be075815879305965020f492cdb43da12" + integrity sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA== dependencies: - "@tanstack/react-virtual" "^3.0.0-beta.60" - client-only "^0.0.1" + "@floating-ui/utils" "^0.2.8" + +"@floating-ui/dom@^1.0.0": + version "1.6.11" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.11.tgz#8631857838d34ee5712339eb7cbdfb8ad34da723" + integrity sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ== + dependencies: + "@floating-ui/core" "^1.6.0" + "@floating-ui/utils" "^0.2.8" + +"@floating-ui/react-dom@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31" + integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A== + dependencies: + "@floating-ui/dom" "^1.0.0" + +"@floating-ui/react@^0.26.16": + version "0.26.24" + resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.24.tgz#072b9dfeca4e79ef4e3000ef1c28e0ffc86f4ed4" + integrity sha512-2ly0pCkZIGEQUq5H8bBK0XJmc1xIK/RM3tvVzY3GBER7IOD1UgmC2Y2tjj4AuS+TC+vTE1KJv2053290jua0Sw== + dependencies: + "@floating-ui/react-dom" "^2.1.2" + "@floating-ui/utils" "^0.2.8" + tabbable "^6.0.0" + +"@floating-ui/utils@^0.2.8": + version "0.2.8" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62" + integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig== + +"@headlessui/react@^2.1.9": + version "2.1.9" + resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-2.1.9.tgz#d8d3ff64255177a87706cc4f24f42aeac65b1695" + integrity sha512-ckWw7vlKtnoa1fL2X0fx1a3t/Li9MIKDVXn3SgG65YlxvDAsNrY39PPCxVM7sQRA7go2fJsuHSSauKFNaJHH7A== + dependencies: + "@floating-ui/react" "^0.26.16" + "@react-aria/focus" "^3.17.1" + "@react-aria/interactions" "^3.21.3" + "@tanstack/react-virtual" "^3.8.1" "@humanwhocodes/config-array@^0.11.14": version "0.11.14" @@ -278,6 +316,57 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@react-aria/focus@^3.17.1": + version "3.18.3" + resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.18.3.tgz#4fe32de1e7530beab8da2e7b89f0f17d22a47e5e" + integrity sha512-WKUElg+5zS0D3xlVn8MntNnkzJql2J6MuzAMP8Sv5WTgFDse/XGR842dsxPTIyKKdrWVCRegCuwa4m3n/GzgJw== + dependencies: + "@react-aria/interactions" "^3.22.3" + "@react-aria/utils" "^3.25.3" + "@react-types/shared" "^3.25.0" + "@swc/helpers" "^0.5.0" + clsx "^2.0.0" + +"@react-aria/interactions@^3.21.3", "@react-aria/interactions@^3.22.3": + version "3.22.3" + resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.22.3.tgz#3ba50db12f6ed443ae061eed79e41509eaa3d8e6" + integrity sha512-RRUb/aG+P0IKTIWikY/SylB6bIbLZeztnZY2vbe7RAG5MgVaCgn5HQ45SI15GlTmhsFG8CnF6slJsUFJiNHpbQ== + dependencies: + "@react-aria/ssr" "^3.9.6" + "@react-aria/utils" "^3.25.3" + "@react-types/shared" "^3.25.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/ssr@^3.9.6": + version "3.9.6" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.9.6.tgz#a9e8b351acdc8238f2b5215b0ce904636c6ea690" + integrity sha512-iLo82l82ilMiVGy342SELjshuWottlb5+VefO3jOQqQRNYnJBFpUSadswDPbRimSgJUZuFwIEYs6AabkP038fA== + dependencies: + "@swc/helpers" "^0.5.0" + +"@react-aria/utils@^3.25.3": + version "3.25.3" + resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.25.3.tgz#cad9bffc07b045cdc283df2cb65c18747acbf76d" + integrity sha512-PR5H/2vaD8fSq0H/UB9inNbc8KDcVmW6fYAfSWkkn+OAdhTTMVKqXXrZuZBWyFfSD5Ze7VN6acr4hrOQm2bmrA== + dependencies: + "@react-aria/ssr" "^3.9.6" + "@react-stately/utils" "^3.10.4" + "@react-types/shared" "^3.25.0" + "@swc/helpers" "^0.5.0" + clsx "^2.0.0" + +"@react-stately/utils@^3.10.4": + version "3.10.4" + resolved "https://registry.yarnpkg.com/@react-stately/utils/-/utils-3.10.4.tgz#310663a834b67048d305e1680ed258130092fe51" + integrity sha512-gBEQEIMRh5f60KCm7QKQ2WfvhB2gLUr9b72sqUdIZ2EG+xuPgaIlCBeSicvjmjBvYZwOjoOEnmIkcx2GHp/HWw== + dependencies: + "@swc/helpers" "^0.5.0" + +"@react-types/shared@^3.25.0": + version "3.25.0" + resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.25.0.tgz#7223baf72256e918a3c29081bb1ecc6fad4fbf58" + integrity sha512-OZSyhzU6vTdW3eV/mz5i6hQwQUhkRs7xwY2d1aqPvTdMe0+2cY7Fwp45PAiwYLEj73i9ro2FxF9qC4DvHGSCgQ== + "@rushstack/eslint-patch@^1.3.3": version "1.10.1" resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.10.1.tgz#7ca168b6937818e9a74b47ac4e2112b2e1a024cf" @@ -290,6 +379,13 @@ dependencies: tslib "^2.4.0" +"@swc/helpers@^0.5.0": + version "0.5.13" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.13.tgz#33e63ff3cd0cade557672bd7888a39ce7d115a8c" + integrity sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w== + dependencies: + tslib "^2.4.0" + "@tailwindcss/typography@^0.5.12": version "0.5.12" resolved "https://registry.yarnpkg.com/@tailwindcss/typography/-/typography-0.5.12.tgz#c0532fd594427b7f4e8e38eff7bf272c63a1dca4" @@ -300,17 +396,17 @@ lodash.merge "^4.6.2" postcss-selector-parser "6.0.10" -"@tanstack/react-virtual@^3.0.0-beta.60": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.2.0.tgz#fb70f9c6baee753a5a0f7618ac886205d5a02af9" - integrity sha512-OEdMByf2hEfDa6XDbGlZN8qO6bTjlNKqjM3im9JG+u3mCL8jALy0T/67oDI001raUUPh1Bdmfn4ZvPOV5knpcg== +"@tanstack/react-virtual@^3.8.1": + version "3.10.8" + resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.10.8.tgz#bf4b06f157ed298644a96ab7efc1a2b01ab36e3c" + integrity sha512-VbzbVGSsZlQktyLrP5nxE+vE1ZR+U0NFAWPbJLoG2+DKPwd2D7dVICTVIIaYlJqX1ZCEnYDbaOpmMwbsyhBoIA== dependencies: - "@tanstack/virtual-core" "3.2.0" + "@tanstack/virtual-core" "3.10.8" -"@tanstack/virtual-core@3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.2.0.tgz#874d36135e4badce2719e7bdc556ce240cbaff14" - integrity sha512-P5XgYoAw/vfW65byBbJQCw+cagdXDT/qH6wmABiLt4v4YBT2q2vqCOhihe+D1Nt325F/S/0Tkv6C5z0Lv+VBQQ== +"@tanstack/virtual-core@3.10.8": + version "3.10.8" + resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.10.8.tgz#975446a667755222f62884c19e5c3c66d959b8b4" + integrity sha512-PBu00mtt95jbKFi6Llk9aik8bnR3tR/oQP1o3TSi+iG//+Q2RTIzCEgKkHG8BB86kxMNW6O8wku+Lmi+QFR6jA== "@types/json5@^0.0.29": version "0.0.29" @@ -779,11 +875,16 @@ chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" -client-only@0.0.1, client-only@^0.0.1: +client-only@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== +clsx@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== + clsx@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.0.tgz#e851283bcb5c80ee7608db18487433f7b23f77cb" @@ -2995,6 +3096,11 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +tabbable@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" + integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== + tailwind-merge@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-2.2.2.tgz#87341e7604f0e20499939e152cd2841f41f7a3df" From 7cce853618f323f4471e89418ccb99f36d00e976 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 11 Oct 2024 10:35:59 +0530 Subject: [PATCH 039/115] feat(providers): add optimization modes --- src/agents/academicSearchAgent.ts | 57 ++++++---- src/agents/redditSearchAgent.ts | 53 +++++---- src/agents/webSearchAgent.ts | 86 +++++++++++---- src/agents/youtubeSearchAgent.ts | 53 +++++---- src/websocket/messageHandler.ts | 3 +- ui/components/ChatWindow.tsx | 4 + ui/components/EmptyChat.tsx | 6 + ui/components/EmptyChatMessageInput.tsx | 16 ++- .../MessageInputActions/Optimization.tsx | 104 ++++++++++++++++++ 9 files changed, 294 insertions(+), 88 deletions(-) create mode 100644 ui/components/MessageInputActions/Optimization.tsx diff --git a/src/agents/academicSearchAgent.ts b/src/agents/academicSearchAgent.ts index a72e3a2..4a10c98 100644 --- a/src/agents/academicSearchAgent.ts +++ b/src/agents/academicSearchAgent.ts @@ -118,7 +118,6 @@ const createBasicAcademicSearchRetrieverChain = (llm: BaseChatModel) => { engines: [ 'arxiv', 'google scholar', - 'internetarchivescholar', 'pubmed', ], }); @@ -143,6 +142,7 @@ const createBasicAcademicSearchRetrieverChain = (llm: BaseChatModel) => { const createBasicAcademicSearchAnsweringChain = ( llm: BaseChatModel, embeddings: Embeddings, + optimizationMode: 'speed' | 'balanced' | 'quality', ) => { const basicAcademicSearchRetrieverChain = createBasicAcademicSearchRetrieverChain(llm); @@ -168,26 +168,33 @@ const createBasicAcademicSearchAnsweringChain = ( (doc) => doc.pageContent && doc.pageContent.length > 0, ); - const [docEmbeddings, queryEmbedding] = await Promise.all([ - embeddings.embedDocuments(docsWithContent.map((doc) => doc.pageContent)), - embeddings.embedQuery(query), - ]); + if (optimizationMode === 'speed') { + return docsWithContent.slice(0, 15); + } else if (optimizationMode === 'balanced') { + console.log('Balanced mode'); + const [docEmbeddings, queryEmbedding] = await Promise.all([ + embeddings.embedDocuments( + docsWithContent.map((doc) => doc.pageContent), + ), + embeddings.embedQuery(query), + ]); - const similarity = docEmbeddings.map((docEmbedding, i) => { - const sim = computeSimilarity(queryEmbedding, docEmbedding); + const similarity = docEmbeddings.map((docEmbedding, i) => { + const sim = computeSimilarity(queryEmbedding, docEmbedding); - return { - index: i, - similarity: sim, - }; - }); + return { + index: i, + similarity: sim, + }; + }); - const sortedDocs = similarity - .sort((a, b) => b.similarity - a.similarity) - .slice(0, 15) - .map((sim) => docsWithContent[sim.index]); + const sortedDocs = similarity + .sort((a, b) => b.similarity - a.similarity) + .slice(0, 15) + .map((sim) => docsWithContent[sim.index]); - return sortedDocs; + return sortedDocs; + } }; return RunnableSequence.from([ @@ -224,12 +231,17 @@ const basicAcademicSearch = ( history: BaseMessage[], llm: BaseChatModel, embeddings: Embeddings, + optimizationMode: 'speed' | 'balanced' | 'quality', ) => { const emitter = new eventEmitter(); try { const basicAcademicSearchAnsweringChain = - createBasicAcademicSearchAnsweringChain(llm, embeddings); + createBasicAcademicSearchAnsweringChain( + llm, + embeddings, + optimizationMode, + ); const stream = basicAcademicSearchAnsweringChain.streamEvents( { @@ -258,8 +270,15 @@ const handleAcademicSearch = ( history: BaseMessage[], llm: BaseChatModel, embeddings: Embeddings, + optimizationMode: 'speed' | 'balanced' | 'quality', ) => { - const emitter = basicAcademicSearch(message, history, llm, embeddings); + const emitter = basicAcademicSearch( + message, + history, + llm, + embeddings, + optimizationMode, + ); return emitter; }; diff --git a/src/agents/redditSearchAgent.ts b/src/agents/redditSearchAgent.ts index 9c2c443..2c44c13 100644 --- a/src/agents/redditSearchAgent.ts +++ b/src/agents/redditSearchAgent.ts @@ -138,6 +138,7 @@ const createBasicRedditSearchRetrieverChain = (llm: BaseChatModel) => { const createBasicRedditSearchAnsweringChain = ( llm: BaseChatModel, embeddings: Embeddings, + optimizationMode: 'speed' | 'balanced' | 'quality', ) => { const basicRedditSearchRetrieverChain = createBasicRedditSearchRetrieverChain(llm); @@ -163,27 +164,33 @@ const createBasicRedditSearchAnsweringChain = ( (doc) => doc.pageContent && doc.pageContent.length > 0, ); - const [docEmbeddings, queryEmbedding] = await Promise.all([ - embeddings.embedDocuments(docsWithContent.map((doc) => doc.pageContent)), - embeddings.embedQuery(query), - ]); + if (optimizationMode === 'speed') { + return docsWithContent.slice(0, 15); + } else if (optimizationMode === 'balanced') { + const [docEmbeddings, queryEmbedding] = await Promise.all([ + embeddings.embedDocuments( + docsWithContent.map((doc) => doc.pageContent), + ), + embeddings.embedQuery(query), + ]); - const similarity = docEmbeddings.map((docEmbedding, i) => { - const sim = computeSimilarity(queryEmbedding, docEmbedding); + const similarity = docEmbeddings.map((docEmbedding, i) => { + const sim = computeSimilarity(queryEmbedding, docEmbedding); - return { - index: i, - similarity: sim, - }; - }); + return { + index: i, + similarity: sim, + }; + }); - const sortedDocs = similarity - .filter((sim) => sim.similarity > 0.3) - .sort((a, b) => b.similarity - a.similarity) - .slice(0, 15) - .map((sim) => docsWithContent[sim.index]); + const sortedDocs = similarity + .filter((sim) => sim.similarity > 0.3) + .sort((a, b) => b.similarity - a.similarity) + .slice(0, 15) + .map((sim) => docsWithContent[sim.index]); - return sortedDocs; + return sortedDocs; + } }; return RunnableSequence.from([ @@ -220,12 +227,13 @@ const basicRedditSearch = ( history: BaseMessage[], llm: BaseChatModel, embeddings: Embeddings, + optimizationMode: 'speed' | 'balanced' | 'quality', ) => { const emitter = new eventEmitter(); try { const basicRedditSearchAnsweringChain = - createBasicRedditSearchAnsweringChain(llm, embeddings); + createBasicRedditSearchAnsweringChain(llm, embeddings, optimizationMode); const stream = basicRedditSearchAnsweringChain.streamEvents( { chat_history: history, @@ -253,8 +261,15 @@ const handleRedditSearch = ( history: BaseMessage[], llm: BaseChatModel, embeddings: Embeddings, + optimizationMode: 'speed' | 'balanced' | 'quality', ) => { - const emitter = basicRedditSearch(message, history, llm, embeddings); + const emitter = basicRedditSearch( + message, + history, + llm, + embeddings, + optimizationMode, + ); return emitter; }; diff --git a/src/agents/webSearchAgent.ts b/src/agents/webSearchAgent.ts index 77ec181..51653a0 100644 --- a/src/agents/webSearchAgent.ts +++ b/src/agents/webSearchAgent.ts @@ -216,12 +216,34 @@ const createBasicWebSearchRetrieverChain = (llm: BaseChatModel) => { await Promise.all( docGroups.map(async (doc) => { const res = await llm.invoke(` - You are a text summarizer. You need to summarize the text provided inside the \`text\` XML block. - You need to summarize the text into 1 or 2 sentences capturing the main idea of the text. - You need to make sure that you don't miss any point while summarizing the text. - You will also be given a \`query\` XML block which will contain the query of the user. Try to answer the query in the summary from the text provided. - If the query says Summarize then you just need to summarize the text without answering the query. - Only return the summarized text without any other messages, text or XML block. + You are a web search summarizer, tasked with summarizing a piece of text retrieved from a web search. Your job is to summarize the + text into a detailed, 2-4 paragraph explanation that captures the main ideas and provides a comprehensive answer to the query. + If the query is \"summarize\", you should provide a detailed summary of the text. If the query is a specific question, you should answer it in the summary. + + - **Journalistic tone**: The summary should sound professional and journalistic, not too casual or vague. + - **Thorough and detailed**: Ensure that every key point from the text is captured and that the summary directly answers the query. + - **Not too lengthy, but detailed**: The summary should be informative but not excessively long. Focus on providing detailed information in a concise format. + + The text will be shared inside the \`text\` XML tag, and the query inside the \`query\` XML tag. + + <example> + <text> + Docker is a set of platform-as-a-service products that use OS-level virtualization to deliver software in packages called containers. + It was first released in 2013 and is developed by Docker, Inc. Docker is designed to make it easier to create, deploy, and run applications + by using containers. + </text> + + <query> + What is Docker and how does it work? + </query> + + Response: + Docker is a revolutionary platform-as-a-service product developed by Docker, Inc., that uses container technology to make application + deployment more efficient. It allows developers to package their software with all necessary dependencies, making it easier to run in + any environment. Released in 2013, Docker has transformed the way applications are built, deployed, and managed. + </example> + + Everything below is the actual data you will be working with. Good luck! <query> ${question} @@ -273,6 +295,7 @@ const createBasicWebSearchRetrieverChain = (llm: BaseChatModel) => { const createBasicWebSearchAnsweringChain = ( llm: BaseChatModel, embeddings: Embeddings, + optimizationMode: 'speed' | 'balanced' | 'quality', ) => { const basicWebSearchRetrieverChain = createBasicWebSearchRetrieverChain(llm); @@ -301,27 +324,33 @@ const createBasicWebSearchAnsweringChain = ( (doc) => doc.pageContent && doc.pageContent.length > 0, ); - const [docEmbeddings, queryEmbedding] = await Promise.all([ - embeddings.embedDocuments(docsWithContent.map((doc) => doc.pageContent)), - embeddings.embedQuery(query), - ]); + if (optimizationMode === 'speed') { + return docsWithContent.slice(0, 15); + } else if (optimizationMode === 'balanced') { + const [docEmbeddings, queryEmbedding] = await Promise.all([ + embeddings.embedDocuments( + docsWithContent.map((doc) => doc.pageContent), + ), + embeddings.embedQuery(query), + ]); - const similarity = docEmbeddings.map((docEmbedding, i) => { - const sim = computeSimilarity(queryEmbedding, docEmbedding); + const similarity = docEmbeddings.map((docEmbedding, i) => { + const sim = computeSimilarity(queryEmbedding, docEmbedding); - return { - index: i, - similarity: sim, - }; - }); + return { + index: i, + similarity: sim, + }; + }); - const sortedDocs = similarity - .filter((sim) => sim.similarity > 0.3) - .sort((a, b) => b.similarity - a.similarity) - .slice(0, 15) - .map((sim) => docsWithContent[sim.index]); + const sortedDocs = similarity + .filter((sim) => sim.similarity > 0.3) + .sort((a, b) => b.similarity - a.similarity) + .slice(0, 15) + .map((sim) => docsWithContent[sim.index]); - return sortedDocs; + return sortedDocs; + } }; return RunnableSequence.from([ @@ -358,6 +387,7 @@ const basicWebSearch = ( history: BaseMessage[], llm: BaseChatModel, embeddings: Embeddings, + optimizationMode: 'speed' | 'balanced' | 'quality', ) => { const emitter = new eventEmitter(); @@ -365,6 +395,7 @@ const basicWebSearch = ( const basicWebSearchAnsweringChain = createBasicWebSearchAnsweringChain( llm, embeddings, + optimizationMode, ); const stream = basicWebSearchAnsweringChain.streamEvents( @@ -394,8 +425,15 @@ const handleWebSearch = ( history: BaseMessage[], llm: BaseChatModel, embeddings: Embeddings, + optimizationMode: 'speed' | 'balanced' | 'quality', ) => { - const emitter = basicWebSearch(message, history, llm, embeddings); + const emitter = basicWebSearch( + message, + history, + llm, + embeddings, + optimizationMode, + ); return emitter; }; diff --git a/src/agents/youtubeSearchAgent.ts b/src/agents/youtubeSearchAgent.ts index e9b6553..2f53bc9 100644 --- a/src/agents/youtubeSearchAgent.ts +++ b/src/agents/youtubeSearchAgent.ts @@ -138,6 +138,7 @@ const createBasicYoutubeSearchRetrieverChain = (llm: BaseChatModel) => { const createBasicYoutubeSearchAnsweringChain = ( llm: BaseChatModel, embeddings: Embeddings, + optimizationMode: 'speed' | 'balanced' | 'quality', ) => { const basicYoutubeSearchRetrieverChain = createBasicYoutubeSearchRetrieverChain(llm); @@ -163,27 +164,33 @@ const createBasicYoutubeSearchAnsweringChain = ( (doc) => doc.pageContent && doc.pageContent.length > 0, ); - const [docEmbeddings, queryEmbedding] = await Promise.all([ - embeddings.embedDocuments(docsWithContent.map((doc) => doc.pageContent)), - embeddings.embedQuery(query), - ]); + if (optimizationMode === 'speed') { + return docsWithContent.slice(0, 15); + } else { + const [docEmbeddings, queryEmbedding] = await Promise.all([ + embeddings.embedDocuments( + docsWithContent.map((doc) => doc.pageContent), + ), + embeddings.embedQuery(query), + ]); - const similarity = docEmbeddings.map((docEmbedding, i) => { - const sim = computeSimilarity(queryEmbedding, docEmbedding); + const similarity = docEmbeddings.map((docEmbedding, i) => { + const sim = computeSimilarity(queryEmbedding, docEmbedding); - return { - index: i, - similarity: sim, - }; - }); + return { + index: i, + similarity: sim, + }; + }); - const sortedDocs = similarity - .filter((sim) => sim.similarity > 0.3) - .sort((a, b) => b.similarity - a.similarity) - .slice(0, 15) - .map((sim) => docsWithContent[sim.index]); + const sortedDocs = similarity + .filter((sim) => sim.similarity > 0.3) + .sort((a, b) => b.similarity - a.similarity) + .slice(0, 15) + .map((sim) => docsWithContent[sim.index]); - return sortedDocs; + return sortedDocs; + } }; return RunnableSequence.from([ @@ -220,12 +227,13 @@ const basicYoutubeSearch = ( history: BaseMessage[], llm: BaseChatModel, embeddings: Embeddings, + optimizationMode: 'speed' | 'balanced' | 'quality', ) => { const emitter = new eventEmitter(); try { const basicYoutubeSearchAnsweringChain = - createBasicYoutubeSearchAnsweringChain(llm, embeddings); + createBasicYoutubeSearchAnsweringChain(llm, embeddings, optimizationMode); const stream = basicYoutubeSearchAnsweringChain.streamEvents( { @@ -254,8 +262,15 @@ const handleYoutubeSearch = ( history: BaseMessage[], llm: BaseChatModel, embeddings: Embeddings, + optimizationMode: 'speed' | 'balanced' | 'quality', ) => { - const emitter = basicYoutubeSearch(message, history, llm, embeddings); + const emitter = basicYoutubeSearch( + message, + history, + llm, + embeddings, + optimizationMode, + ); return emitter; }; diff --git a/src/websocket/messageHandler.ts b/src/websocket/messageHandler.ts index 332910c..d230386 100644 --- a/src/websocket/messageHandler.ts +++ b/src/websocket/messageHandler.ts @@ -22,7 +22,7 @@ type Message = { type WSMessage = { message: Message; - copilot: boolean; + optimizationMode: string; type: string; focusMode: string; history: Array<[string, string]>; @@ -138,6 +138,7 @@ export const handleMessage = async ( history, llm, embeddings, + parsedWSMessage.optimizationMode, ); handleEmitterEvents(emitter, ws, id, parsedMessage.chatId); diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index b3d0089..b67ca3a 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -278,6 +278,7 @@ const ChatWindow = ({ id }: { id?: string }) => { const [messages, setMessages] = useState<Message[]>([]); const [focusMode, setFocusMode] = useState('webSearch'); + const [optimizationMode, setOptimizationMode] = useState('speed'); const [isMessagesLoaded, setIsMessagesLoaded] = useState(false); @@ -346,6 +347,7 @@ const ChatWindow = ({ id }: { id?: string }) => { content: message, }, focusMode: focusMode, + optimizationMode: optimizationMode, history: [...chatHistory, ['human', message]], }), ); @@ -508,6 +510,8 @@ const ChatWindow = ({ id }: { id?: string }) => { sendMessage={sendMessage} focusMode={focusMode} setFocusMode={setFocusMode} + optimizationMode={optimizationMode} + setOptimizationMode={setOptimizationMode} /> )} </div> diff --git a/ui/components/EmptyChat.tsx b/ui/components/EmptyChat.tsx index ea3642b..63f186c 100644 --- a/ui/components/EmptyChat.tsx +++ b/ui/components/EmptyChat.tsx @@ -4,10 +4,14 @@ const EmptyChat = ({ sendMessage, focusMode, setFocusMode, + optimizationMode, + setOptimizationMode, }: { sendMessage: (message: string) => void; focusMode: string; setFocusMode: (mode: string) => void; + optimizationMode: string; + setOptimizationMode: (mode: string) => void; }) => { return ( <div className="relative"> @@ -19,6 +23,8 @@ const EmptyChat = ({ sendMessage={sendMessage} focusMode={focusMode} setFocusMode={setFocusMode} + optimizationMode={optimizationMode} + setOptimizationMode={setOptimizationMode} /> </div> </div> diff --git a/ui/components/EmptyChatMessageInput.tsx b/ui/components/EmptyChatMessageInput.tsx index 39d3f16..845bed9 100644 --- a/ui/components/EmptyChatMessageInput.tsx +++ b/ui/components/EmptyChatMessageInput.tsx @@ -3,15 +3,20 @@ import { useEffect, useRef, useState } from 'react'; import TextareaAutosize from 'react-textarea-autosize'; import CopilotToggle from './MessageInputActions/Copilot'; import Focus from './MessageInputActions/Focus'; +import Optimization from './MessageInputActions/Optimization'; const EmptyChatMessageInput = ({ sendMessage, focusMode, setFocusMode, + optimizationMode, + setOptimizationMode, }: { sendMessage: (message: string) => void; focusMode: string; setFocusMode: (mode: string) => void; + optimizationMode: string; + setOptimizationMode: (mode: string) => void; }) => { const [copilotEnabled, setCopilotEnabled] = useState(false); const [message, setMessage] = useState(''); @@ -66,14 +71,13 @@ const EmptyChatMessageInput = ({ placeholder="Ask anything..." /> <div className="flex flex-row items-center justify-between mt-4"> - <div className="flex flex-row items-center space-x-1 -mx-2"> + <div className="flex flex-row items-center space-x-4"> <Focus focusMode={focusMode} setFocusMode={setFocusMode} /> - {/* <Attach /> */} </div> - <div className="flex flex-row items-center space-x-4 -mx-2"> - <CopilotToggle - copilotEnabled={copilotEnabled} - setCopilotEnabled={setCopilotEnabled} + <div className="flex flex-row items-center space-x-1 sm:space-x-4"> + <Optimization + optimizationMode={optimizationMode} + setOptimizationMode={setOptimizationMode} /> <button disabled={message.trim().length === 0} diff --git a/ui/components/MessageInputActions/Optimization.tsx b/ui/components/MessageInputActions/Optimization.tsx new file mode 100644 index 0000000..ac8a7b0 --- /dev/null +++ b/ui/components/MessageInputActions/Optimization.tsx @@ -0,0 +1,104 @@ +import { ChevronDown, Sliders, Star, Zap } from 'lucide-react'; +import { cn } from '@/lib/utils'; +import { + Popover, + PopoverButton, + PopoverPanel, + Transition, +} from '@headlessui/react'; +import { Fragment } from 'react'; + +const OptimizationModes = [ + { + key: 'speed', + title: 'Speed', + description: 'Prioritize speed and get the quickest possible answer.', + icon: <Zap size={20} className="text-[#FF9800]" />, + }, + { + key: 'balanced', + title: 'Balanced', + description: 'Find the right balance between speed and accuracy', + icon: <Sliders size={20} className="text-[#4CAF50]" />, + }, + { + key: 'quality', + title: 'Quality (Soon)', + description: 'Get the most thorough and accurate answer', + icon: ( + <Star + size={16} + className="text-[#2196F3] dark:text-[#BBDEFB] fill-[#BBDEFB] dark:fill-[#2196F3]" + /> + ), + }, +]; + +const Optimization = ({ + optimizationMode, + setOptimizationMode, +}: { + optimizationMode: string; + setOptimizationMode: (mode: string) => void; +}) => { + return ( + <Popover className="relative w-full max-w-[15rem] md:max-w-md lg:max-w-lg"> + <PopoverButton + type="button" + className="p-2 text-black/50 dark:text-white/50 rounded-xl hover:bg-light-secondary dark:hover:bg-dark-secondary active:scale-95 transition duration-200 hover:text-black dark:hover:text-white" + > + <div className="flex flex-row items-center space-x-1"> + { + OptimizationModes.find((mode) => mode.key === optimizationMode) + ?.icon + } + <p className="text-xs font-medium"> + { + OptimizationModes.find((mode) => mode.key === optimizationMode) + ?.title + } + </p> + <ChevronDown size={20} /> + </div> + </PopoverButton> + <Transition + as={Fragment} + enter="transition ease-out duration-150" + enterFrom="opacity-0 translate-y-1" + enterTo="opacity-100 translate-y-0" + leave="transition ease-in duration-150" + leaveFrom="opacity-100 translate-y-0" + leaveTo="opacity-0 translate-y-1" + > + <PopoverPanel className="absolute z-10 w-64 md:w-[250px] right-0"> + <div className="flex flex-col gap-2 bg-light-primary dark:bg-dark-primary border rounded-lg border-light-200 dark:border-dark-200 w-full p-4 max-h-[200px] md:max-h-none overflow-y-auto"> + {OptimizationModes.map((mode, i) => ( + <PopoverButton + onClick={() => setOptimizationMode(mode.key)} + key={i} + disabled={mode.key === 'quality'} + className={cn( + 'p-2 rounded-lg flex flex-col items-start justify-start text-start space-y-1 duration-200 cursor-pointer transition', + optimizationMode === mode.key + ? 'bg-light-secondary dark:bg-dark-secondary' + : 'hover:bg-light-secondary dark:hover:bg-dark-secondary', + mode.key === 'quality' && 'opacity-50 cursor-not-allowed', + )} + > + <div className="flex flex-row items-center space-x-1 text-black dark:text-white"> + {mode.icon} + <p className="text-sm font-medium">{mode.title}</p> + </div> + <p className="text-black/70 dark:text-white/70 text-xs"> + {mode.description} + </p> + </PopoverButton> + ))} + </div> + </PopoverPanel> + </Transition> + </Popover> + ); +}; + +export default Optimization; From 0a7167eb04305f84a0171834ae40ebb8767e3c59 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 11 Oct 2024 10:54:08 +0530 Subject: [PATCH 040/115] feat(search-api): add `optimizationMode` --- docs/API/SEARCH.md | 11 +++++++++-- src/routes/models.ts | 14 +++++++++++++- src/routes/search.ts | 4 +++- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/docs/API/SEARCH.md b/docs/API/SEARCH.md index a573021..f87e788 100644 --- a/docs/API/SEARCH.md +++ b/docs/API/SEARCH.md @@ -26,6 +26,7 @@ The API accepts a JSON object in the request body, where you define the focus mo "provider": "openai", "model": "text-embedding-3-large" }, + "optimizationMode": "speed", "focusMode": "webSearch", "query": "What is Perplexica", "history": [ @@ -37,7 +38,7 @@ The API accepts a JSON object in the request body, where you define the focus mo ### Request Parameters -- **`chatModel`** (object, optional): Defines the chat model to be used for the query. For model details you can send a GET request at `http://localhost:3001/api/models`. +- **`chatModel`** (object, optional): Defines the chat model to be used for the query. For model details you can send a GET request at `http://localhost:3001/api/models`. Make sure to use the key value (For example "gpt-4o-mini" instead of the display name "GPT 4 omni mini"). - `provider`: Specifies the provider for the chat model (e.g., `openai`, `ollama`). - `model`: The specific model from the chosen provider (e.g., `gpt-4o-mini`). @@ -45,7 +46,7 @@ The API accepts a JSON object in the request body, where you define the focus mo - `customOpenAIBaseURL`: If you’re using a custom OpenAI instance, provide the base URL. - `customOpenAIKey`: The API key for a custom OpenAI instance. -- **`embeddingModel`** (object, optional): Defines the embedding model for similarity-based searching. For model details you can send a GET request at `http://localhost:3001/api/models`. +- **`embeddingModel`** (object, optional): Defines the embedding model for similarity-based searching. For model details you can send a GET request at `http://localhost:3001/api/models`. Make sure to use the key value (For example "text-embedding-3-large" instead of the display name "Text Embedding 3 Large"). - `provider`: The provider for the embedding model (e.g., `openai`). - `model`: The specific embedding model (e.g., `text-embedding-3-large`). @@ -54,9 +55,15 @@ The API accepts a JSON object in the request body, where you define the focus mo - `webSearch`, `academicSearch`, `writingAssistant`, `wolframAlphaSearch`, `youtubeSearch`, `redditSearch`. +- **`optimizationMode`** (string, optional): Specifies the optimization mode to control the balance between performance and quality. Available modes: + + - `speed`: Prioritize speed and return the fastest answer. + - `balanced`: Provide a balanced answer with good speed and reasonable quality. + - **`query`** (string, required): The search query or question. - **`history`** (array, optional): An array of message pairs representing the conversation history. Each pair consists of a role (either 'human' or 'assistant') and the message content. This allows the system to use the context of the conversation to refine results. Example: + ```json [ ["human", "What is Perplexica?"], diff --git a/src/routes/models.ts b/src/routes/models.ts index 36df25a..c4f5d40 100644 --- a/src/routes/models.ts +++ b/src/routes/models.ts @@ -12,7 +12,19 @@ router.get('/', async (req, res) => { const [chatModelProviders, embeddingModelProviders] = await Promise.all([ getAvailableChatModelProviders(), getAvailableEmbeddingModelProviders(), - ]); + ]); + + Object.keys(chatModelProviders).forEach((provider) => { + Object.keys(chatModelProviders[provider]).forEach((model) => { + delete chatModelProviders[provider][model].model; + }); + }); + + Object.keys(embeddingModelProviders).forEach((provider) => { + Object.keys(embeddingModelProviders[provider]).forEach((model) => { + delete embeddingModelProviders[provider][model].model; + }); + }); res.status(200).json({ chatModelProviders, embeddingModelProviders }); } catch (err) { diff --git a/src/routes/search.ts b/src/routes/search.ts index 9eec29f..6684632 100644 --- a/src/routes/search.ts +++ b/src/routes/search.ts @@ -25,6 +25,7 @@ interface embeddingModel { } interface ChatRequestBody { + optimizationMode: 'speed' | 'balanced'; focusMode: string; chatModel?: chatModel; embeddingModel?: embeddingModel; @@ -41,6 +42,7 @@ router.post('/', async (req, res) => { } body.history = body.history || []; + body.optimizationMode = body.optimizationMode || 'balanced'; const history: BaseMessage[] = body.history.map((msg) => { if (msg[0] === 'human') { @@ -119,7 +121,7 @@ router.post('/', async (req, res) => { return res.status(400).json({ message: 'Invalid focus mode' }); } - const emitter = searchHandler(body.query, history, llm, embeddings); + const emitter = searchHandler(body.query, history, llm, embeddings, body.optimizationMode); let message = ''; let sources = []; From 61c0347ef29256fc70311f40a6b4a20ddd6f9b7e Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Tue, 15 Oct 2024 16:20:45 +0530 Subject: [PATCH 041/115] feat(app): add discover --- src/routes/discover.ts | 48 +++++++++++++++++ src/routes/index.ts | 2 + ui/app/discover/page.tsx | 112 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 162 insertions(+) create mode 100644 src/routes/discover.ts create mode 100644 ui/app/discover/page.tsx diff --git a/src/routes/discover.ts b/src/routes/discover.ts new file mode 100644 index 0000000..b6f8ff9 --- /dev/null +++ b/src/routes/discover.ts @@ -0,0 +1,48 @@ +import express from 'express'; +import { searchSearxng } from '../lib/searxng'; +import logger from '../utils/logger'; + +const router = express.Router(); + +router.get('/', async (req, res) => { + try { + const data = ( + await Promise.all([ + searchSearxng('site:businessinsider.com AI', { + engines: ['bing news'], + pageno: 1, + }), + searchSearxng('site:www.exchangewire.com AI', { + engines: ['bing news'], + pageno: 1, + }), + searchSearxng('site:yahoo.com AI', { + engines: ['bing news'], + pageno: 1, + }), + searchSearxng('site:businessinsider.com tech', { + engines: ['bing news'], + pageno: 1, + }), + searchSearxng('site:www.exchangewire.com tech', { + engines: ['bing news'], + pageno: 1, + }), + searchSearxng('site:yahoo.com tech', { + engines: ['bing news'], + pageno: 1, + }), + ]) + ) + .map((result) => result.results) + .flat() + .sort(() => Math.random() - 0.5); + + return res.json({ blogs: data }); + } catch (err: any) { + logger.error(`Error in discover route: ${err.message}`); + return res.status(500).json({ message: 'An error has occurred' }); + } +}); + +export default router; diff --git a/src/routes/index.ts b/src/routes/index.ts index 6e82e54..28c297f 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -6,6 +6,7 @@ import modelsRouter from './models'; import suggestionsRouter from './suggestions'; import chatsRouter from './chats'; import searchRouter from './search'; +import discoverRouter from './discover'; const router = express.Router(); @@ -16,5 +17,6 @@ router.use('/models', modelsRouter); router.use('/suggestions', suggestionsRouter); router.use('/chats', chatsRouter); router.use('/search', searchRouter); +router.use('/discover', discoverRouter); export default router; diff --git a/ui/app/discover/page.tsx b/ui/app/discover/page.tsx new file mode 100644 index 0000000..7788d0d --- /dev/null +++ b/ui/app/discover/page.tsx @@ -0,0 +1,112 @@ +'use client'; + +import { Search } from 'lucide-react'; +import { useEffect, useState } from 'react'; +import Link from 'next/link'; +import { toast } from 'sonner'; + +interface Discover { + title: string; + content: string; + url: string; + thumbnail: string; +} + +const Page = () => { + const [discover, setDiscover] = useState<Discover[] | null>(null); + const [loading, setLoading] = useState(true); + + useEffect(() => { + const fetchData = async () => { + try { + const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/discover`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + }, + }); + + const data = await res.json(); + + if (!res.ok) { + throw new Error(data.message); + } + + data.blogs = data.blogs.filter((blog: Discover) => blog.thumbnail); + + setDiscover(data.blogs); + } catch (err: any) { + console.error('Error fetching data:', err.message); + toast.error('Error fetching data'); + } finally { + setLoading(false); + } + }; + + fetchData(); + }, []); + + return loading ? ( + <div className="flex flex-row items-center justify-center min-h-screen"> + <svg + aria-hidden="true" + className="w-8 h-8 text-light-200 fill-light-secondary dark:text-[#202020] animate-spin dark:fill-[#ffffff3b]" + viewBox="0 0 100 101" + fill="none" + xmlns="http://www.w3.org/2000/svg" + > + <path + d="M100 50.5908C100.003 78.2051 78.1951 100.003 50.5908 100C22.9765 99.9972 0.997224 78.018 1 50.4037C1.00281 22.7993 22.8108 0.997224 50.4251 1C78.0395 1.00281 100.018 22.8108 100 50.4251ZM9.08164 50.594C9.06312 73.3997 27.7909 92.1272 50.5966 92.1457C73.4023 92.1642 92.1298 73.4365 92.1483 50.6308C92.1669 27.8251 73.4392 9.0973 50.6335 9.07878C27.8278 9.06026 9.10003 27.787 9.08164 50.594Z" + fill="currentColor" + /> + <path + d="M93.9676 39.0409C96.393 38.4037 97.8624 35.9116 96.9801 33.5533C95.1945 28.8227 92.871 24.3692 90.0681 20.348C85.6237 14.1775 79.4473 9.36872 72.0454 6.45794C64.6435 3.54717 56.3134 2.65431 48.3133 3.89319C45.869 4.27179 44.3768 6.77534 45.014 9.20079C45.6512 11.6262 48.1343 13.0956 50.5786 12.717C56.5073 11.8281 62.5542 12.5399 68.0406 14.7911C73.527 17.0422 78.2187 20.7487 81.5841 25.4923C83.7976 28.5886 85.4467 32.059 86.4416 35.7474C87.1273 38.1189 89.5423 39.6781 91.9676 39.0409Z" + fill="currentFill" + /> + </svg> + </div> + ) : ( + <> + <div> + <div className="flex flex-col pt-4"> + <div className="flex items-center"> + <Search /> + <h1 className="text-3xl font-medium p-2">Discover</h1> + </div> + <hr className="border-t border-[#2B2C2C] my-4 w-full" /> + </div> + + <div className="grid lg:grid-cols-3 sm:grid-cols-2 grid-cols-1 gap-4 pb-28 lg:pb-8 w-full justify-items-center lg:justify-items-start"> + {discover && + discover?.map((item, i) => ( + <Link + href={`/?q=Summary: ${item.url}`} + key={i} + className="max-w-sm rounded-lg overflow-hidden bg-light-secondary dark:bg-dark-secondary hover:-translate-y-[1px] transition duration-200" + > + <img + className="object-cover w-full aspect-video" + src={ + new URL(item.thumbnail).origin + + new URL(item.thumbnail).pathname + + `?id=${new URL(item.thumbnail).searchParams.get('id')}` + } + alt={item.title} + /> + <div className="px-6 py-4"> + <div className="font-bold text-lg mb-2"> + {item.title.slice(0, 100)}... + </div> + <p className="text-black-70 dark:text-white/70 text-sm"> + {item.content.slice(0, 100)}... + </p> + </div> + </Link> + ))} + </div> + </div> + </> + ); +}; + +export default Page; From 19bf71cefc8e76d952add1e53c8761c591d76f18 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Tue, 15 Oct 2024 16:21:00 +0530 Subject: [PATCH 042/115] feat(chat-window): only send init msg if ready --- ui/components/ChatWindow.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index b67ca3a..6a56f7e 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -473,11 +473,11 @@ const ChatWindow = ({ id }: { id?: string }) => { }; useEffect(() => { - if (isReady && initialMessage) { + if (isReady && initialMessage && ws?.readyState === 1) { sendMessage(initialMessage); } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [isReady, initialMessage]); + }, [isReady, initialMessage, ws?.readyState]); if (hasError) { return ( From 9db847c366b88202ccb29809e06fe88fbc4dc3dd Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Tue, 15 Oct 2024 16:21:15 +0530 Subject: [PATCH 043/115] feat(library): enhance UI --- ui/app/library/page.tsx | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/ui/app/library/page.tsx b/ui/app/library/page.tsx index 8294fc1..379596c 100644 --- a/ui/app/library/page.tsx +++ b/ui/app/library/page.tsx @@ -1,7 +1,7 @@ 'use client'; import DeleteChat from '@/components/DeleteChat'; -import { formatTimeDifference } from '@/lib/utils'; +import { cn, formatTimeDifference } from '@/lib/utils'; import { BookOpenText, ClockIcon, Delete, ScanEye } from 'lucide-react'; import Link from 'next/link'; import { useEffect, useState } from 'react'; @@ -58,13 +58,12 @@ const Page = () => { </div> ) : ( <div> - <div className="fixed z-40 top-0 left-0 right-0 lg:pl-[104px] lg:pr-6 lg:px-8 px-4 py-4 lg:py-6 border-b border-light-200 dark:border-dark-200"> - <div className="flex flex-row items-center space-x-2 max-w-screen-lg lg:mx-auto"> + <div className="flex flex-col pt-4"> + <div className="flex items-center"> <BookOpenText /> - <h2 className="text-black dark:text-white lg:text-3xl lg:font-medium"> - Library - </h2> + <h1 className="text-3xl font-medium p-2">Library</h1> </div> + <hr className="border-t border-[#2B2C2C] my-4 w-full" /> </div> {chats.length === 0 && ( <div className="flex flex-row items-center justify-center min-h-screen"> @@ -74,10 +73,15 @@ const Page = () => { </div> )} {chats.length > 0 && ( - <div className="flex flex-col pt-16 lg:pt-24"> + <div className="flex flex-col pb-20 lg:pb-2"> {chats.map((chat, i) => ( <div - className="flex flex-col space-y-4 border-b border-white-200 dark:border-dark-200 py-6 lg:mx-4" + className={cn( + 'flex flex-col space-y-4 py-6', + i !== chats.length - 1 + ? 'border-b border-white-200 dark:border-dark-200' + : '', + )} key={i} > <Link From b9509a5d4194160d243538ba2f0f25de917de42b Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Tue, 15 Oct 2024 16:21:29 +0530 Subject: [PATCH 044/115] feat(app): lint & beautify --- src/agents/academicSearchAgent.ts | 6 +----- src/routes/models.ts | 2 +- src/routes/search.ts | 8 +++++++- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/agents/academicSearchAgent.ts b/src/agents/academicSearchAgent.ts index 4a10c98..fc95d3c 100644 --- a/src/agents/academicSearchAgent.ts +++ b/src/agents/academicSearchAgent.ts @@ -115,11 +115,7 @@ const createBasicAcademicSearchRetrieverChain = (llm: BaseChatModel) => { const res = await searchSearxng(input, { language: 'en', - engines: [ - 'arxiv', - 'google scholar', - 'pubmed', - ], + engines: ['arxiv', 'google scholar', 'pubmed'], }); const documents = res.results.map( diff --git a/src/routes/models.ts b/src/routes/models.ts index c4f5d40..b5fbe12 100644 --- a/src/routes/models.ts +++ b/src/routes/models.ts @@ -12,7 +12,7 @@ router.get('/', async (req, res) => { const [chatModelProviders, embeddingModelProviders] = await Promise.all([ getAvailableChatModelProviders(), getAvailableEmbeddingModelProviders(), - ]); + ]); Object.keys(chatModelProviders).forEach((provider) => { Object.keys(chatModelProviders[provider]).forEach((model) => { diff --git a/src/routes/search.ts b/src/routes/search.ts index 6684632..70fe228 100644 --- a/src/routes/search.ts +++ b/src/routes/search.ts @@ -121,7 +121,13 @@ router.post('/', async (req, res) => { return res.status(400).json({ message: 'Invalid focus mode' }); } - const emitter = searchHandler(body.query, history, llm, embeddings, body.optimizationMode); + const emitter = searchHandler( + body.query, + history, + llm, + embeddings, + body.optimizationMode, + ); let message = ''; let sources = []; From 7532c436db88ca1caf718048f6da1fef35ab9f0d Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Tue, 15 Oct 2024 16:23:13 +0530 Subject: [PATCH 045/115] feat(package): bump version --- README.md | 2 +- package.json | 2 +- ui/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f66e8b1..c96e1a4 100644 --- a/README.md +++ b/README.md @@ -144,8 +144,8 @@ For more details, check out the full documentation [here](https://github.com/Itz - [x] History Saving features - [x] Introducing various Focus Modes - [x] Adding API support +- [x] Adding Discover - [ ] Finalizing Copilot Mode -- [ ] Adding Discover ## Support Us diff --git a/package.json b/package.json index ab45174..17cbe41 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "perplexica-backend", - "version": "1.9.0-rc3", + "version": "1.9.0", "license": "MIT", "author": "ItzCrazyKns", "scripts": { diff --git a/ui/package.json b/ui/package.json index e5dc677..70a144a 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,6 +1,6 @@ { "name": "perplexica-frontend", - "version": "1.9.0-rc3", + "version": "1.9.0", "license": "MIT", "author": "ItzCrazyKns", "scripts": { From 3a01eebc040f84ee28310f5129210bffb2cee5ee Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Tue, 15 Oct 2024 18:04:50 +0530 Subject: [PATCH 046/115] feat(chat): prevent ws not open errors --- package.json | 1 + src/agents/academicSearchAgent.ts | 1 - src/agents/webSearchAgent.ts | 22 ++++++++++++++++++++- src/websocket/connectionManager.ts | 12 ++++++++++++ ui/components/ChatWindow.tsx | 31 +++++++++++++++++------------- yarn.lock | 7 +++++++ 6 files changed, 59 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 17cbe41..48efd23 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@types/html-to-text": "^9.0.4", "@types/pdf-parse": "^1.1.4", "@types/readable-stream": "^4.0.11", + "@types/ws": "^8.5.12", "drizzle-kit": "^0.22.7", "nodemon": "^3.1.0", "prettier": "^3.2.5", diff --git a/src/agents/academicSearchAgent.ts b/src/agents/academicSearchAgent.ts index fc95d3c..bad4065 100644 --- a/src/agents/academicSearchAgent.ts +++ b/src/agents/academicSearchAgent.ts @@ -167,7 +167,6 @@ const createBasicAcademicSearchAnsweringChain = ( if (optimizationMode === 'speed') { return docsWithContent.slice(0, 15); } else if (optimizationMode === 'balanced') { - console.log('Balanced mode'); const [docEmbeddings, queryEmbedding] = await Promise.all([ embeddings.embedDocuments( docsWithContent.map((doc) => doc.pageContent), diff --git a/src/agents/webSearchAgent.ts b/src/agents/webSearchAgent.ts index 51653a0..1ff3354 100644 --- a/src/agents/webSearchAgent.ts +++ b/src/agents/webSearchAgent.ts @@ -227,7 +227,7 @@ const createBasicWebSearchRetrieverChain = (llm: BaseChatModel) => { The text will be shared inside the \`text\` XML tag, and the query inside the \`query\` XML tag. <example> - <text> + 1. \`<text> Docker is a set of platform-as-a-service products that use OS-level virtualization to deliver software in packages called containers. It was first released in 2013 and is developed by Docker, Inc. Docker is designed to make it easier to create, deploy, and run applications by using containers. @@ -241,6 +241,26 @@ const createBasicWebSearchRetrieverChain = (llm: BaseChatModel) => { Docker is a revolutionary platform-as-a-service product developed by Docker, Inc., that uses container technology to make application deployment more efficient. It allows developers to package their software with all necessary dependencies, making it easier to run in any environment. Released in 2013, Docker has transformed the way applications are built, deployed, and managed. + \` + 2. \`<text> + The theory of relativity, or simply relativity, encompasses two interrelated theories of Albert Einstein: special relativity and general + relativity. However, the word "relativity" is sometimes used in reference to Galilean invariance. The term "theory of relativity" was based + on the expression "relative theory" used by Max Planck in 1906. The theory of relativity usually encompasses two interrelated theories by + Albert Einstein: special relativity and general relativity. Special relativity applies to all physical phenomena in the absence of gravity. + General relativity explains the law of gravitation and its relation to other forces of nature. It applies to the cosmological and astrophysical + realm, including astronomy. + </text> + + <query> + summarize + </query> + + Response: + The theory of relativity, developed by Albert Einstein, encompasses two main theories: special relativity and general relativity. Special + relativity applies to all physical phenomena in the absence of gravity, while general relativity explains the law of gravitation and its + relation to other forces of nature. The theory of relativity is based on the concept of "relative theory," as introduced by Max Planck in + 1906. It is a fundamental theory in physics that has revolutionized our understanding of the universe. + \` </example> Everything below is the actual data you will be working with. Good luck! diff --git a/src/websocket/connectionManager.ts b/src/websocket/connectionManager.ts index 04797c5..d980500 100644 --- a/src/websocket/connectionManager.ts +++ b/src/websocket/connectionManager.ts @@ -78,6 +78,18 @@ export const handleConnection = async ( ws.close(); } + const interval = setInterval(() => { + if (ws.readyState === ws.OPEN) { + ws.send( + JSON.stringify({ + type: 'signal', + data: 'open', + }), + ); + clearInterval(interval); + } + }, 5); + ws.on( 'message', async (message) => diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index 6a56f7e..a80a5c9 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -171,11 +171,22 @@ const useSocket = ( } }, 10000); - ws.onopen = () => { - console.log('[DEBUG] open'); - clearTimeout(timeoutId); - setIsWSReady(true); - }; + ws.addEventListener('message', (e) => { + const data = JSON.parse(e.data); + if (data.type === 'signal' && data.data === 'open') { + const interval = setInterval(() => { + if (ws.readyState === 1) { + setIsWSReady(true); + clearInterval(interval); + } + }, 5); + clearTimeout(timeoutId); + console.log('[DEBUG] opened'); + } + if (data.type === 'error') { + toast.error(data.data); + } + }); ws.onerror = () => { clearTimeout(timeoutId); @@ -189,13 +200,6 @@ const useSocket = ( console.log('[DEBUG] closed'); }; - ws.addEventListener('message', (e) => { - const data = JSON.parse(e.data); - if (data.type === 'error') { - toast.error(data.data); - } - }); - setWs(ws); }; @@ -325,6 +329,7 @@ const ChatWindow = ({ id }: { id?: string }) => { useEffect(() => { if (isMessagesLoaded && isWSReady) { setIsReady(true); + console.log('[DEBUG] ready'); } }, [isMessagesLoaded, isWSReady]); @@ -477,7 +482,7 @@ const ChatWindow = ({ id }: { id?: string }) => { sendMessage(initialMessage); } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [isReady, initialMessage, ws?.readyState]); + }, [ws?.readyState, isReady, initialMessage, isWSReady]); if (hasError) { return ( diff --git a/yarn.lock b/yarn.lock index 1c34e1d..deb35ea 100644 --- a/yarn.lock +++ b/yarn.lock @@ -690,6 +690,13 @@ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== +"@types/ws@^8.5.12": + version "8.5.12" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" + integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== + dependencies: + "@types/node" "*" + "@xenova/transformers@^2.17.1": version "2.17.1" resolved "https://registry.yarnpkg.com/@xenova/transformers/-/transformers-2.17.1.tgz#712f7a72c76c8aa2075749382f83dc7dd4e5a9a5" From c7abd96b053769d6114576411fd66e97e971cc1a Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 17 Oct 2024 10:01:00 +0530 Subject: [PATCH 047/115] feat(readme): add networking --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index c96e1a4..4aa17cb 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ - [Ollama Connection Errors](#ollama-connection-errors) - [Using as a Search Engine](#using-as-a-search-engine) - [Using Perplexica's API](#using-perplexicas-api) +- [Expose Perplexica to a network](#expose-perplexica-to-network) - [One-Click Deployment](#one-click-deployment) - [Upcoming Features](#upcoming-features) - [Support Us](#support-us) @@ -133,6 +134,10 @@ Perplexica also provides an API for developers looking to integrate its powerful For more details, check out the full documentation [here](https://github.com/ItzCrazyKns/Perplexica/tree/master/docs/API/SEARCH.md). +## Expose Perplexica to network + +You can access Perplexica over your home network by following our networking guide [here](https://github.com/ItzCrazyKns/Perplexica/blob/master/docs/installation/NETWORKING.md). + ## One-Click Deployment [![Deploy to RepoCloud](https://d16t0pc4846x52.cloudfront.net/deploylobe.svg)](https://repocloud.io/details/?app_id=267) From 24e1919c5e10ca9e48703f9838882e515816231e Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 17 Oct 2024 10:46:18 +0530 Subject: [PATCH 048/115] feat(dockerfile): update image to prevent python errors --- backend.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend.dockerfile b/backend.dockerfile index b8d0155..e835b40 100644 --- a/backend.dockerfile +++ b/backend.dockerfile @@ -1,4 +1,4 @@ -FROM node:slim +FROM node:20-buster WORKDIR /home/perplexica From 5aad2febda1c8228368dbf72169a0289c0b21d20 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 17 Oct 2024 18:50:43 +0530 Subject: [PATCH 049/115] feat(messageHandler): fix duplicate messageIDs --- src/websocket/messageHandler.ts | 47 +++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/src/websocket/messageHandler.ts b/src/websocket/messageHandler.ts index d230386..e915b22 100644 --- a/src/websocket/messageHandler.ts +++ b/src/websocket/messageHandler.ts @@ -10,8 +10,8 @@ import type { BaseChatModel } from '@langchain/core/language_models/chat_models' import type { Embeddings } from '@langchain/core/embeddings'; import logger from '../utils/logger'; import db from '../db'; -import { chats, messages } from '../db/schema'; -import { eq } from 'drizzle-orm'; +import { chats, messages as messagesSchema } from '../db/schema'; +import { eq, asc, gt } from 'drizzle-orm'; import crypto from 'crypto'; type Message = { @@ -71,7 +71,7 @@ const handleEmitterEvents = ( emitter.on('end', () => { ws.send(JSON.stringify({ type: 'messageEnd', messageId: messageId })); - db.insert(messages) + db.insert(messagesSchema) .values({ content: recievedMessage, chatId: chatId, @@ -106,7 +106,9 @@ export const handleMessage = async ( const parsedWSMessage = JSON.parse(message) as WSMessage; const parsedMessage = parsedWSMessage.message; - const id = crypto.randomBytes(7).toString('hex'); + const humanMessageId = + parsedMessage.messageId ?? crypto.randomBytes(7).toString('hex'); + const aiMessageId = crypto.randomBytes(7).toString('hex'); if (!parsedMessage.content) return ws.send( @@ -141,7 +143,7 @@ export const handleMessage = async ( parsedWSMessage.optimizationMode, ); - handleEmitterEvents(emitter, ws, id, parsedMessage.chatId); + handleEmitterEvents(emitter, ws, aiMessageId, parsedMessage.chatId); const chat = await db.query.chats.findFirst({ where: eq(chats.id, parsedMessage.chatId), @@ -159,18 +161,29 @@ export const handleMessage = async ( .execute(); } - await db - .insert(messages) - .values({ - content: parsedMessage.content, - chatId: parsedMessage.chatId, - messageId: id, - role: 'user', - metadata: JSON.stringify({ - createdAt: new Date(), - }), - }) - .execute(); + const messageExists = await db.query.messages.findFirst({ + where: eq(messagesSchema.messageId, humanMessageId), + }); + + if (!messageExists) { + await db + .insert(messagesSchema) + .values({ + content: parsedMessage.content, + chatId: parsedMessage.chatId, + messageId: humanMessageId, + role: 'user', + metadata: JSON.stringify({ + createdAt: new Date(), + }), + }) + .execute(); + } else { + await db + .delete(messagesSchema) + .where(gt(messagesSchema.id, messageExists.id)) + .execute(); + } } else { ws.send( JSON.stringify({ From 3e6e57dab04e562fabcde4e7cc333569f13c6107 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 17 Oct 2024 18:51:11 +0530 Subject: [PATCH 050/115] feat(chat-window): fix rewrite, use messageID --- ui/components/ChatWindow.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index a80a5c9..986f8ae 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -333,8 +333,9 @@ const ChatWindow = ({ id }: { id?: string }) => { } }, [isMessagesLoaded, isWSReady]); - const sendMessage = async (message: string) => { + const sendMessage = async (message: string, messageId?: string) => { if (loading) return; + setLoading(true); setMessageAppeared(false); @@ -342,12 +343,13 @@ const ChatWindow = ({ id }: { id?: string }) => { let recievedMessage = ''; let added = false; - const messageId = crypto.randomBytes(7).toString('hex'); + messageId = messageId ?? crypto.randomBytes(7).toString('hex'); ws?.send( JSON.stringify({ type: 'message', message: { + messageId: messageId, chatId: chatId!, content: message, }, @@ -474,7 +476,7 @@ const ChatWindow = ({ id }: { id?: string }) => { return [...prev.slice(0, messages.length > 2 ? index - 1 : 0)]; }); - sendMessage(message.content); + sendMessage(message.content, message.messageId); }; useEffect(() => { From 54e0bb317a916a1b782e3db8744c68c0ef31f856 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 18 Oct 2024 11:05:57 +0530 Subject: [PATCH 051/115] feat(groq): update deprecated models --- src/lib/providers/groq.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/providers/groq.ts b/src/lib/providers/groq.ts index 69db4f7..62ca2d7 100644 --- a/src/lib/providers/groq.ts +++ b/src/lib/providers/groq.ts @@ -22,12 +22,12 @@ export const loadGroqChatModels = async () => { }, ), }, - 'llama-3.2-11b-text-preview': { - displayName: 'Llama 3.2 11B Text', + 'llama-3.2-11b-vision-preview': { + displayName: 'Llama 3.2 11B Vision', model: new ChatOpenAI( { openAIApiKey: groqApiKey, - modelName: 'llama-3.2-11b-text-preview', + modelName: 'llama-3.2-11b-vision-preview', temperature: 0.7, }, { @@ -35,12 +35,12 @@ export const loadGroqChatModels = async () => { }, ), }, - 'llama-3.2-90b-text-preview': { - displayName: 'Llama 3.2 90B Text', + 'llama-3.2-90b-vision-preview': { + displayName: 'Llama 3.2 90B Vision', model: new ChatOpenAI( { openAIApiKey: groqApiKey, - modelName: 'llama-3.2-90b-text-preview', + modelName: 'llama-3.2-90b-vision-preview', temperature: 0.7, }, { From 6e0d3baef69647e097d2d6462a277f35cef2aa70 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 18 Oct 2024 11:50:56 +0530 Subject: [PATCH 052/115] feat(dockerfile): update docker image --- backend.dockerfile | 2 +- src/agents/webSearchAgent.ts | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/backend.dockerfile b/backend.dockerfile index e835b40..c25ddd8 100644 --- a/backend.dockerfile +++ b/backend.dockerfile @@ -1,4 +1,4 @@ -FROM node:20-buster +FROM node:18-slim WORKDIR /home/perplexica diff --git a/src/agents/webSearchAgent.ts b/src/agents/webSearchAgent.ts index 1ff3354..02ad12a 100644 --- a/src/agents/webSearchAgent.ts +++ b/src/agents/webSearchAgent.ts @@ -89,18 +89,21 @@ Rephrased question: `; const basicWebSearchResponsePrompt = ` - You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are also an expert at summarizing web pages or documents and searching for content in them. + You are Perplexica, an advanced AI designed to deliver highly detailed, informative answers based on web search results. You are + tasked with generating long, comprehensive responses that thoroughly answer the user's query, providing all relevant details and + additional information where appropriate. + + - **Detailed and informative**: Your response should cover all aspects of the user's query in depth. Include extra details that add value to the answer. + - **Journalistic tone**: Write in a neutral, journalistic style that is professional and informative. + - **Use markdown**: Format your response using markdown for readability. Avoid bullet points—focus on paragraphs with appropriate headings and subheadings. + - **Lengthy, blog-style answers**: Your responses should be extensive and read like a detailed blog post. The answer should be long, thorough, and include any additional information the user may find helpful. Don't put the first biggest heading like in blog posts, just start with the answer and you can use smaller headings to break down the answer. - Generate a response that is informative and relevant to the user's query based on provided context (the context consits of search results containing a brief description of the content of that page). - You must use this context to answer the user's query in the best way possible. Use an unbaised and journalistic tone in your response. Do not repeat the text. - You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them. - If the query contains some links and the user asks to answer from those links you will be provided the entire content of the page inside the \`context\` XML block. You can then use this content to answer the user's query. - If the user asks to summarize content from some links, you will be provided the entire content of the page inside the \`context\` XML block. You can then use this content to summarize the text. The content provided inside the \`context\` block will be already summarized by another model so you just need to use that content to answer the user's query. - Your responses should be medium to long in length be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative. You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. + - **Never return references to the search results**: You should never return references to the search results in your response. The user has been shared the search results and you should only provide the answer with citations. + Anything inside the following \`context\` HTML block provided below is for your knowledge returned by the search engine and is not shared by the user. You have to answer question on the basis of it and cite the relevant information from it but you do not have to talk about the context in your response. From 8fe1b7c5e35b0d4ecfd8f85083d8d3151d76795d Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 18 Oct 2024 12:01:56 +0530 Subject: [PATCH 053/115] feat(webSearchAgent): revert prompt --- src/agents/webSearchAgent.ts | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/agents/webSearchAgent.ts b/src/agents/webSearchAgent.ts index 02ad12a..1ff3354 100644 --- a/src/agents/webSearchAgent.ts +++ b/src/agents/webSearchAgent.ts @@ -89,21 +89,18 @@ Rephrased question: `; const basicWebSearchResponsePrompt = ` - You are Perplexica, an advanced AI designed to deliver highly detailed, informative answers based on web search results. You are - tasked with generating long, comprehensive responses that thoroughly answer the user's query, providing all relevant details and - additional information where appropriate. - - - **Detailed and informative**: Your response should cover all aspects of the user's query in depth. Include extra details that add value to the answer. - - **Journalistic tone**: Write in a neutral, journalistic style that is professional and informative. - - **Use markdown**: Format your response using markdown for readability. Avoid bullet points—focus on paragraphs with appropriate headings and subheadings. - - **Lengthy, blog-style answers**: Your responses should be extensive and read like a detailed blog post. The answer should be long, thorough, and include any additional information the user may find helpful. Don't put the first biggest heading like in blog posts, just start with the answer and you can use smaller headings to break down the answer. + You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are also an expert at summarizing web pages or documents and searching for content in them. + Generate a response that is informative and relevant to the user's query based on provided context (the context consits of search results containing a brief description of the content of that page). + You must use this context to answer the user's query in the best way possible. Use an unbaised and journalistic tone in your response. Do not repeat the text. + You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them. + If the query contains some links and the user asks to answer from those links you will be provided the entire content of the page inside the \`context\` XML block. You can then use this content to answer the user's query. + If the user asks to summarize content from some links, you will be provided the entire content of the page inside the \`context\` XML block. You can then use this content to summarize the text. The content provided inside the \`context\` block will be already summarized by another model so you just need to use that content to answer the user's query. + Your responses should be medium to long in length be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative. You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. - - **Never return references to the search results**: You should never return references to the search results in your response. The user has been shared the search results and you should only provide the answer with citations. - Anything inside the following \`context\` HTML block provided below is for your knowledge returned by the search engine and is not shared by the user. You have to answer question on the basis of it and cite the relevant information from it but you do not have to talk about the context in your response. From c7c0ebe5b6775f607e0666b4863166d2a9cd2fc9 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 18 Oct 2024 12:15:04 +0530 Subject: [PATCH 054/115] feat(dockerfile): use NPM registry --- backend.dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend.dockerfile b/backend.dockerfile index c25ddd8..bfcee63 100644 --- a/backend.dockerfile +++ b/backend.dockerfile @@ -10,6 +10,8 @@ COPY yarn.lock /home/perplexica/ RUN mkdir /home/perplexica/data +RUN yarn config set registry https://registry.npmjs.org/ + RUN yarn install --frozen-lockfile RUN yarn build From 71fc19f5259b34c5b608f06a079e3457ad02bf3a Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 18 Oct 2024 12:24:55 +0530 Subject: [PATCH 055/115] feat(dockerfile): update registry --- backend.dockerfile | 2 - yarn.lock | 806 ++++++++++++++++++++++----------------------- 2 files changed, 403 insertions(+), 405 deletions(-) diff --git a/backend.dockerfile b/backend.dockerfile index bfcee63..c25ddd8 100644 --- a/backend.dockerfile +++ b/backend.dockerfile @@ -10,8 +10,6 @@ COPY yarn.lock /home/perplexica/ RUN mkdir /home/perplexica/data -RUN yarn config set registry https://registry.npmjs.org/ - RUN yarn install --frozen-lockfile RUN yarn build diff --git a/yarn.lock b/yarn.lock index deb35ea..502dc90 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,7 +4,7 @@ "@anthropic-ai/sdk@^0.22.0": version "0.22.0" - resolved "https://registry.yarnpkg.com/@anthropic-ai/sdk/-/sdk-0.22.0.tgz#548e4218d9810fd494e595d4e57cb2d46d301a1a" + resolved "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.22.0.tgz#548e4218d9810fd494e595d4e57cb2d46d301a1a" integrity sha512-dv4BCC6FZJw3w66WNLsHlUFjhu19fS1L/5jMPApwhZLa/Oy1j0A2i3RypmDtHEPp4Wwg3aZkSHksp7VzYWjzmw== dependencies: "@types/node" "^18.11.18" @@ -18,7 +18,7 @@ "@anthropic-ai/sdk@^0.9.1": version "0.9.1" - resolved "https://registry.yarnpkg.com/@anthropic-ai/sdk/-/sdk-0.9.1.tgz#b2d2b7bf05c90dce502c9a2e869066870f69ba88" + resolved "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.9.1.tgz#b2d2b7bf05c90dce502c9a2e869066870f69ba88" integrity sha512-wa1meQ2WSfoY8Uor3EdrJq0jTiZJoKoSii2ZVWRY1oN4Tlr5s59pADg9T79FTbPe1/se5c3pBeZgJL63wmuoBA== dependencies: "@types/node" "^18.11.18" @@ -33,19 +33,19 @@ "@colors/colors@1.6.0", "@colors/colors@^1.6.0": version "1.6.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" + resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" "@dabh/diagnostics@^2.0.2": version "2.0.3" - resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" + resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== dependencies: colorspace "1.1.x" @@ -54,7 +54,7 @@ "@esbuild-kit/core-utils@^3.3.2": version "3.3.2" - resolved "https://registry.yarnpkg.com/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz#186b6598a5066f0413471d7c4d45828e399ba96c" + resolved "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz#186b6598a5066f0413471d7c4d45828e399ba96c" integrity sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ== dependencies: esbuild "~0.18.20" @@ -62,7 +62,7 @@ "@esbuild-kit/esm-loader@^2.5.5": version "2.6.5" - resolved "https://registry.yarnpkg.com/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz#6eedee46095d7d13b1efc381e2211ed1c60e64ea" + resolved "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz#6eedee46095d7d13b1efc381e2211ed1c60e64ea" integrity sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA== dependencies: "@esbuild-kit/core-utils" "^3.3.2" @@ -70,252 +70,252 @@ "@esbuild/aix-ppc64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" + resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== "@esbuild/android-arm64@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== "@esbuild/android-arm64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== "@esbuild/android-arm@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" + resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== "@esbuild/android-arm@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" + resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== "@esbuild/android-x64@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" + resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== "@esbuild/android-x64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" + resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== "@esbuild/darwin-arm64@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== "@esbuild/darwin-arm64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== "@esbuild/darwin-x64@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== "@esbuild/darwin-x64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== "@esbuild/freebsd-arm64@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" + resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== "@esbuild/freebsd-arm64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" + resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== "@esbuild/freebsd-x64@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" + resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== "@esbuild/freebsd-x64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" + resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== "@esbuild/linux-arm64@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== "@esbuild/linux-arm64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== "@esbuild/linux-arm@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" + resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== "@esbuild/linux-arm@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" + resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== "@esbuild/linux-ia32@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" + resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== "@esbuild/linux-ia32@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" + resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== "@esbuild/linux-loong64@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" + resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== "@esbuild/linux-loong64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" + resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== "@esbuild/linux-mips64el@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" + resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== "@esbuild/linux-mips64el@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" + resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== "@esbuild/linux-ppc64@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" + resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== "@esbuild/linux-ppc64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" + resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== "@esbuild/linux-riscv64@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" + resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== "@esbuild/linux-riscv64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" + resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== "@esbuild/linux-s390x@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" + resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== "@esbuild/linux-s390x@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" + resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== "@esbuild/linux-x64@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== "@esbuild/linux-x64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== "@esbuild/netbsd-x64@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" + resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== "@esbuild/netbsd-x64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" + resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== "@esbuild/openbsd-x64@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" + resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== "@esbuild/openbsd-x64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" + resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== "@esbuild/sunos-x64@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== "@esbuild/sunos-x64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== "@esbuild/win32-arm64@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" + resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== "@esbuild/win32-arm64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" + resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== "@esbuild/win32-ia32@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== "@esbuild/win32-ia32@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== "@esbuild/win32-x64@0.18.20": version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== "@esbuild/win32-x64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== "@huggingface/jinja@^0.2.2": version "0.2.2" - resolved "https://registry.yarnpkg.com/@huggingface/jinja/-/jinja-0.2.2.tgz#faeb205a9d6995089bef52655ddd8245d3190627" + resolved "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.2.2.tgz#faeb205a9d6995089bef52655ddd8245d3190627" integrity sha512-/KPde26khDUIPkTGU82jdtTW9UAuvUTumCAbFs/7giR0SxsvZC4hru51PBvpijH6BVkHcROcvZM/lpy5h1jRRA== "@iarna/toml@^2.2.5": version "2.2.5" - resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" + resolved "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== "@jridgewell/resolve-uri@^3.0.3": version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" @@ -323,7 +323,7 @@ "@langchain/anthropic@^0.2.3": version "0.2.3" - resolved "https://registry.yarnpkg.com/@langchain/anthropic/-/anthropic-0.2.3.tgz#1505da939f47c90e53dfede0407c497b8177bdf0" + resolved "https://registry.npmjs.org/@langchain/anthropic/-/anthropic-0.2.3.tgz#1505da939f47c90e53dfede0407c497b8177bdf0" integrity sha512-f2fqzLGcvsXXUyZ1vl8cgwkKDGLshOGrPuR9hkhGuBG5m91eq755OqPBxWJuS1TFtNU813cXft3xh0MQbxavwg== dependencies: "@anthropic-ai/sdk" "^0.22.0" @@ -334,7 +334,7 @@ "@langchain/community@^0.2.16": version "0.2.16" - resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.2.16.tgz#5888baf7fc7ea272c5f91aaa0e71bc444167262d" + resolved "https://registry.npmjs.org/@langchain/community/-/community-0.2.16.tgz#5888baf7fc7ea272c5f91aaa0e71bc444167262d" integrity sha512-dFDcMabKACvuRd0w6EIRLWf1ubPGZEeEwFt9v1jiEr4HCFxH0OF+iM1QUCcVRbB2fK5lqmKeTD1XAeZV8+AyXA== dependencies: "@langchain/core" "~0.2.11" @@ -351,7 +351,7 @@ "@langchain/community@~0.0.41": version "0.0.43" - resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.0.43.tgz#017e2f9b3209b3999482f10df5aec2520731a63c" + resolved "https://registry.npmjs.org/@langchain/community/-/community-0.0.43.tgz#017e2f9b3209b3999482f10df5aec2520731a63c" integrity sha512-60TjV3knGGOPHfbJxLpuwARr8oA0r6Txm8wTFvFx+TjRUrloyBUcWSbJIdm62gAwBJDEHmdjjyWOOzU+eewcuA== dependencies: "@langchain/core" "~0.1.44" @@ -364,7 +364,7 @@ "@langchain/core@>0.1.56 <0.3.0", "@langchain/core@>0.2.0 <0.3.0", "@langchain/core@>=0.2.5 <0.3.0", "@langchain/core@~0.2.0", "@langchain/core@~0.2.11": version "0.2.11" - resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.2.11.tgz#5f47467e20e56b250831baef20083657c6facb4c" + resolved "https://registry.npmjs.org/@langchain/core/-/core-0.2.11.tgz#5f47467e20e56b250831baef20083657c6facb4c" integrity sha512-d4SNL7WI0c3oHrV4WxCRH1/TNqdePXEzYjYwIb4aEH6lW1aM0utGhLbNthX+aYkOL4Ynx2FoG4h91ECIipiKWQ== dependencies: ansi-styles "^5.0.0" @@ -382,7 +382,7 @@ "@langchain/core@>=0.2.9 <0.3.0": version "0.2.15" - resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.2.15.tgz#1bb99ac4fffe935c7ba37edcaa91abfba3c82219" + resolved "https://registry.npmjs.org/@langchain/core/-/core-0.2.15.tgz#1bb99ac4fffe935c7ba37edcaa91abfba3c82219" integrity sha512-L096itIBQ5XNsy5BCCPqIQEk/x4rzI+U4BhYT+fDBYtljESshIi/WzXdmiGfY/6MpVjB76jNuaRgMDmo1m9NeQ== dependencies: ansi-styles "^5.0.0" @@ -400,7 +400,7 @@ "@langchain/core@~0.1.44", "@langchain/core@~0.1.45": version "0.1.52" - resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.1.52.tgz#7619310b83ffa841628efe2e1eda873ca714d068" + resolved "https://registry.npmjs.org/@langchain/core/-/core-0.1.52.tgz#7619310b83ffa841628efe2e1eda873ca714d068" integrity sha512-AEyP99r7jijF33pyzaWtqCkiO9crotgethqq7jznAGlIojMCL9BT/id2DjVyN32SGFTpet273kkjsmEdFSHqpA== dependencies: ansi-styles "^5.0.0" @@ -417,7 +417,7 @@ "@langchain/openai@^0.0.25", "@langchain/openai@~0.0.19": version "0.0.25" - resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.0.25.tgz#8332abea1e3acb9b1169f90636e518c0ee90622e" + resolved "https://registry.npmjs.org/@langchain/openai/-/openai-0.0.25.tgz#8332abea1e3acb9b1169f90636e518c0ee90622e" integrity sha512-cD9xPDDXK2Cjs6yYg27BpdzBnQZvBb1yaNgMoGLWIT27UQVRyT96PLC1OVMQOmMmHaKDBCj/1bW4GQQgX7+d2Q== dependencies: "@langchain/core" "~0.1.45" @@ -428,7 +428,7 @@ "@langchain/openai@~0.0.28": version "0.0.34" - resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.0.34.tgz#36c9bca0721ab9f7e5d40927e7c0429cacbd5b56" + resolved "https://registry.npmjs.org/@langchain/openai/-/openai-0.0.34.tgz#36c9bca0721ab9f7e5d40927e7c0429cacbd5b56" integrity sha512-M+CW4oXle5fdoz2T2SwdOef8pl3/1XmUx1vjn2mXUVM/128aO0l23FMF0SNBsAbRV6P+p/TuzjodchJbi0Ht/A== dependencies: "@langchain/core" ">0.1.56 <0.3.0" @@ -439,7 +439,7 @@ "@langchain/openai@~0.1.0": version "0.1.3" - resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.1.3.tgz#6eb0994e970d85ffa9aaeafb94449024ccf6ca63" + resolved "https://registry.npmjs.org/@langchain/openai/-/openai-0.1.3.tgz#6eb0994e970d85ffa9aaeafb94449024ccf6ca63" integrity sha512-riv/JC9x2A8b7GcHu8sx+mlZJ8KAwSSi231IPTlcciYnKozmrQ5H0vrtiD31fxiDbaRsk7tyCpkSBIOQEo7CyQ== dependencies: "@langchain/core" ">=0.2.5 <0.3.0" @@ -450,7 +450,7 @@ "@langchain/textsplitters@~0.0.0": version "0.0.3" - resolved "https://registry.yarnpkg.com/@langchain/textsplitters/-/textsplitters-0.0.3.tgz#1a3cc93dd2ab330edb225400ded190a22fea14e3" + resolved "https://registry.npmjs.org/@langchain/textsplitters/-/textsplitters-0.0.3.tgz#1a3cc93dd2ab330edb225400ded190a22fea14e3" integrity sha512-cXWgKE3sdWLSqAa8ykbCcUsUF1Kyr5J3HOWYGuobhPEycXW4WI++d5DhzdpL238mzoEXTi90VqfSCra37l5YqA== dependencies: "@langchain/core" ">0.2.0 <0.3.0" @@ -458,27 +458,27 @@ "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + resolved "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== "@protobufjs/base64@^1.1.2": version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + resolved "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== "@protobufjs/codegen@^2.0.4": version "2.0.4" - resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + resolved "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== "@protobufjs/eventemitter@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + resolved "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== "@protobufjs/fetch@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + resolved "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== dependencies: "@protobufjs/aspromise" "^1.1.1" @@ -486,32 +486,32 @@ "@protobufjs/float@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + resolved "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== "@protobufjs/inquire@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + resolved "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== "@protobufjs/path@^1.1.2": version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + resolved "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== "@protobufjs/pool@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + resolved "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== "@protobufjs/utf8@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + resolved "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== "@selderee/plugin-htmlparser2@^0.11.0": version "0.11.0" - resolved "https://registry.yarnpkg.com/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz#d5b5e29a7ba6d3958a1972c7be16f4b2c188c517" + resolved "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz#d5b5e29a7ba6d3958a1972c7be16f4b2c188c517" integrity sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ== dependencies: domhandler "^5.0.3" @@ -519,34 +519,34 @@ "@tsconfig/node10@^1.0.7": version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@types/better-sqlite3@^7.6.10": version "7.6.10" - resolved "https://registry.yarnpkg.com/@types/better-sqlite3/-/better-sqlite3-7.6.10.tgz#1818e56490953404acfd44cdde0464f201be6105" + resolved "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.10.tgz#1818e56490953404acfd44cdde0464f201be6105" integrity sha512-TZBjD+yOsyrUJGmcUj6OS3JADk3+UZcNv3NOBqGkM09bZdi28fNZw8ODqbMOLfKCu7RYCO62/ldq1iHbzxqoPw== dependencies: "@types/node" "*" "@types/body-parser@*": version "1.19.5" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== dependencies: "@types/connect" "*" @@ -554,21 +554,21 @@ "@types/connect@*": version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" "@types/cors@^2.8.17": version "2.8.17" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" + resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== dependencies: "@types/node" "*" "@types/express-serve-static-core@^4.17.33": version "4.17.43" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54" integrity sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg== dependencies: "@types/node" "*" @@ -578,7 +578,7 @@ "@types/express@^4.17.21": version "4.17.21" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== dependencies: "@types/body-parser" "*" @@ -588,27 +588,27 @@ "@types/html-to-text@^9.0.4": version "9.0.4" - resolved "https://registry.yarnpkg.com/@types/html-to-text/-/html-to-text-9.0.4.tgz#4a83dd8ae8bfa91457d0b1ffc26f4d0537eff58c" + resolved "https://registry.npmjs.org/@types/html-to-text/-/html-to-text-9.0.4.tgz#4a83dd8ae8bfa91457d0b1ffc26f4d0537eff58c" integrity sha512-pUY3cKH/Nm2yYrEmDlPR1mR7yszjGx4DrwPjQ702C4/D5CwHuZTgZdIdwPkRbcuhs7BAh2L5rg3CL5cbRiGTCQ== "@types/http-errors@*": version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== "@types/long@^4.0.1": version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + resolved "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== "@types/mime@^1": version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/node-fetch@^2.6.4": version "2.6.11" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" + resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== dependencies: "@types/node" "*" @@ -616,43 +616,43 @@ "@types/node@*": version "20.12.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.2.tgz#9facdd11102f38b21b4ebedd9d7999663343d72e" + resolved "https://registry.npmjs.org/@types/node/-/node-20.12.2.tgz#9facdd11102f38b21b4ebedd9d7999663343d72e" integrity sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ== dependencies: undici-types "~5.26.4" "@types/node@>=13.7.0": version "20.12.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.9.tgz#d7234f2e7839b55fcab5048404aef0195684adff" + resolved "https://registry.npmjs.org/@types/node/-/node-20.12.9.tgz#d7234f2e7839b55fcab5048404aef0195684adff" integrity sha512-o93r47yu04MHumPBCFg0bMPBMNgtMg3jzbhl7e68z50+BMHmRMGDJv13eBlUgOdc9i/uoJXGMGYLtJV4ReTXEg== dependencies: undici-types "~5.26.4" "@types/node@^18.11.18": version "18.19.28" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.28.tgz#c64a2c992c8ebbf61100a4570e4eebc1934ae030" + resolved "https://registry.npmjs.org/@types/node/-/node-18.19.28.tgz#c64a2c992c8ebbf61100a4570e4eebc1934ae030" integrity sha512-J5cOGD9n4x3YGgVuaND6khm5x07MMdAKkRyXnjVR6KFhLMNh2yONGiP7Z+4+tBOt5mK+GvDTiacTOVGGpqiecw== dependencies: undici-types "~5.26.4" "@types/pdf-parse@^1.1.4": version "1.1.4" - resolved "https://registry.yarnpkg.com/@types/pdf-parse/-/pdf-parse-1.1.4.tgz#21a539efd2f16009d08aeed3350133948b5d7ed1" + resolved "https://registry.npmjs.org/@types/pdf-parse/-/pdf-parse-1.1.4.tgz#21a539efd2f16009d08aeed3350133948b5d7ed1" integrity sha512-+gbBHbNCVGGYw1S9lAIIvrHW47UYOhMIFUsJcMkMrzy1Jf0vulBN3XQIjPgnoOXveMuHnF3b57fXROnY/Or7eg== "@types/qs@*": version "6.9.14" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.14.tgz#169e142bfe493895287bee382af6039795e9b75b" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz#169e142bfe493895287bee382af6039795e9b75b" integrity sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA== "@types/range-parser@*": version "1.2.7" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/readable-stream@^4.0.11": version "4.0.11" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-4.0.11.tgz#684f1e947c90cb6a8ad3904523d650bb66cdbb84" + resolved "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.11.tgz#684f1e947c90cb6a8ad3904523d650bb66cdbb84" integrity sha512-R3eUMUTTKoIoaz7UpYLxvZCrOmCRPRbAmoDDHKcimTEySltaJhF8hLzj4+EzyDifiX5eK6oDQGSfmNnXjxZzYQ== dependencies: "@types/node" "*" @@ -660,12 +660,12 @@ "@types/retry@0.12.0": version "0.12.0" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== "@types/send@*": version "0.17.4" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== dependencies: "@types/mime" "^1" @@ -673,7 +673,7 @@ "@types/serve-static@*": version "1.15.7" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== dependencies: "@types/http-errors" "*" @@ -682,24 +682,24 @@ "@types/triple-beam@^1.3.2": version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" + resolved "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== "@types/uuid@^9.0.1": version "9.0.8" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" + resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== "@types/ws@^8.5.12": version "8.5.12" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" + resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== dependencies: "@types/node" "*" "@xenova/transformers@^2.17.1": version "2.17.1" - resolved "https://registry.yarnpkg.com/@xenova/transformers/-/transformers-2.17.1.tgz#712f7a72c76c8aa2075749382f83dc7dd4e5a9a5" + resolved "https://registry.npmjs.org/@xenova/transformers/-/transformers-2.17.1.tgz#712f7a72c76c8aa2075749382f83dc7dd4e5a9a5" integrity sha512-zo702tQAFZXhzeD2GCYUNUqeqkoueOdiSbQWa4s0q7ZE4z8WBIwIsMMPGobpgdqjQ2u0Qulo08wuqVEUrBXjkQ== dependencies: "@huggingface/jinja" "^0.2.2" @@ -710,19 +710,19 @@ abbrev@1: version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== abort-controller@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: event-target-shim "^5.0.0" accepts@~1.3.8: version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" @@ -730,29 +730,29 @@ accepts@~1.3.8: acorn-walk@^8.1.1: version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== acorn@^8.4.1: version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== agentkeepalive@^4.2.1: version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== dependencies: humanize-ms "^1.2.1" ansi-styles@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -760,32 +760,32 @@ anymatch@~3.1.2: arg@^4.1.0: version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-flatten@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== async@^3.2.3: version "3.2.5" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + resolved "https://registry.npmjs.org/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== axios@^1.6.8: version "1.6.8" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + resolved "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== dependencies: follow-redirects "^1.15.6" @@ -794,22 +794,22 @@ axios@^1.6.8: b4a@^1.6.4: version "1.6.6" - resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.6.tgz#a4cc349a3851987c3c4ac2d7785c18744f6da9ba" + resolved "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz#a4cc349a3851987c3c4ac2d7785c18744f6da9ba" integrity sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg== balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== bare-events@^2.0.0, bare-events@^2.2.0: version "2.2.2" - resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.2.2.tgz#a98a41841f98b2efe7ecc5c5468814469b018078" + resolved "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz#a98a41841f98b2efe7ecc5c5468814469b018078" integrity sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ== bare-fs@^2.1.1: version "2.3.0" - resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-2.3.0.tgz#0872f8e33cf291c9fd527d827154f156a298d402" + resolved "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.0.tgz#0872f8e33cf291c9fd527d827154f156a298d402" integrity sha512-TNFqa1B4N99pds2a5NYHR15o0ZpdNKbAeKTE/+G6ED/UeOavv8RY3dr/Fu99HW3zU3pXpo2kDNO8Sjsm2esfOw== dependencies: bare-events "^2.0.0" @@ -818,36 +818,36 @@ bare-fs@^2.1.1: bare-os@^2.1.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-2.3.0.tgz#718e680b139effff0624a7421c098e7a2c2d63da" + resolved "https://registry.npmjs.org/bare-os/-/bare-os-2.3.0.tgz#718e680b139effff0624a7421c098e7a2c2d63da" integrity sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg== bare-path@^2.0.0, bare-path@^2.1.0: version "2.1.2" - resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-2.1.2.tgz#7a0940d34ebe65f7e179fa61ed8d49d9dc151d67" + resolved "https://registry.npmjs.org/bare-path/-/bare-path-2.1.2.tgz#7a0940d34ebe65f7e179fa61ed8d49d9dc151d67" integrity sha512-o7KSt4prEphWUHa3QUwCxUI00R86VdjiuxmJK0iNVDHYPGo+HsDaVCnqCmPbf/MiW1ok8F4p3m8RTHlWk8K2ig== dependencies: bare-os "^2.1.0" bare-stream@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-1.0.0.tgz#25c3e56198d922187320c3f8c52d75c4051178b4" + resolved "https://registry.npmjs.org/bare-stream/-/bare-stream-1.0.0.tgz#25c3e56198d922187320c3f8c52d75c4051178b4" integrity sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ== dependencies: streamx "^2.16.1" base-64@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" + resolved "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA== base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== better-sqlite3@^11.0.0: version "11.0.0" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-11.0.0.tgz#12083acfe0ded6abdba908ed73520f2003e3ea0e" + resolved "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.0.0.tgz#12083acfe0ded6abdba908ed73520f2003e3ea0e" integrity sha512-1NnNhmT3EZTsKtofJlMox1jkMxdedILury74PwUbQBjWgo4tL4kf7uTAjU55mgQwjdzqakSTjkf+E1imrFwjnA== dependencies: bindings "^1.5.0" @@ -855,24 +855,24 @@ better-sqlite3@^11.0.0: binary-extensions@^2.0.0, binary-extensions@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== binary-search@^1.3.5: version "1.3.6" - resolved "https://registry.yarnpkg.com/binary-search/-/binary-search-1.3.6.tgz#e32426016a0c5092f0f3598836a1c7da3560565c" + resolved "https://registry.npmjs.org/binary-search/-/binary-search-1.3.6.tgz#e32426016a0c5092f0f3598836a1c7da3560565c" integrity sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA== bindings@^1.5.0: version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: file-uri-to-path "1.0.0" bl@^4.0.3: version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -881,7 +881,7 @@ bl@^4.0.3: body-parser@1.20.2: version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== dependencies: bytes "3.1.2" @@ -899,7 +899,7 @@ body-parser@1.20.2: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -907,19 +907,19 @@ brace-expansion@^1.1.7: braces@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer@^5.5.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -927,12 +927,12 @@ buffer@^5.5.0: bytes@3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== call-bind@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: es-define-property "^1.0.0" @@ -943,17 +943,17 @@ call-bind@^1.0.7: camelcase@6: version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== charenc@0.0.2: version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + resolved "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== chokidar@^3.5.2: version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" @@ -968,36 +968,36 @@ chokidar@^3.5.2: chownr@^1.1.1: version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== color-convert@^1.9.3: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-string@^1.6.0, color-string@^1.9.0: version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== dependencies: color-name "^1.0.0" @@ -1005,7 +1005,7 @@ color-string@^1.6.0, color-string@^1.9.0: color@^3.1.3: version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== dependencies: color-convert "^1.9.3" @@ -1013,7 +1013,7 @@ color@^3.1.3: color@^4.2.3: version "4.2.3" - resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + resolved "https://registry.npmjs.org/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== dependencies: color-convert "^2.0.1" @@ -1021,7 +1021,7 @@ color@^4.2.3: colorspace@1.1.x: version "1.1.4" - resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + resolved "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== dependencies: color "^3.1.3" @@ -1029,19 +1029,19 @@ colorspace@1.1.x: combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@^10.0.1: version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== compute-cosine-similarity@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/compute-cosine-similarity/-/compute-cosine-similarity-1.1.0.tgz#0086a06b0239deb90f231f0da894efdc48884609" + resolved "https://registry.npmjs.org/compute-cosine-similarity/-/compute-cosine-similarity-1.1.0.tgz#0086a06b0239deb90f231f0da894efdc48884609" integrity sha512-FXhNx0ILLjGi9Z9+lglLzM12+0uoTnYkHm7GiadXDAr0HGVLm25OivUS1B/LPkbzzvlcXz/1EvWg9ZYyJSdhTw== dependencies: compute-dot "^1.1.0" @@ -1051,7 +1051,7 @@ compute-cosine-similarity@^1.1.0: compute-dot@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/compute-dot/-/compute-dot-1.1.0.tgz#01a5ba2c7af73b99002acb258459c9576a8232dc" + resolved "https://registry.npmjs.org/compute-dot/-/compute-dot-1.1.0.tgz#01a5ba2c7af73b99002acb258459c9576a8232dc" integrity sha512-L5Ocet4DdMrXboss13K59OK23GXjiSia7+7Ukc7q4Bl+RVpIXK2W9IHMbWDZkh+JUEvJAwOKRaJDiFUa1LTnJg== dependencies: validate.io-array "^1.0.3" @@ -1059,7 +1059,7 @@ compute-dot@^1.1.0: compute-l2norm@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/compute-l2norm/-/compute-l2norm-1.1.0.tgz#bd09131c6b36c8d70c68334e176009a4e0a989ac" + resolved "https://registry.npmjs.org/compute-l2norm/-/compute-l2norm-1.1.0.tgz#bd09131c6b36c8d70c68334e176009a4e0a989ac" integrity sha512-6EHh1Elj90eU28SXi+h2PLnTQvZmkkHWySpoFz+WOlVNLz3DQoC4ISUHSV9n5jMxPHtKGJ01F4uu2PsXBB8sSg== dependencies: validate.io-array "^1.0.3" @@ -1067,34 +1067,34 @@ compute-l2norm@^1.1.0: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== content-disposition@0.5.4: version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== cookie-signature@1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== cookie@0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== cors@^2.8.5: version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== dependencies: object-assign "^4" @@ -1102,67 +1102,67 @@ cors@^2.8.5: create-require@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== crypt@0.0.2: version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== debug@2.6.9: version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@^3.1.0: version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" debug@^4: version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" debug@^4.3.4: version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== dependencies: ms "2.1.2" decamelize@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" deep-extend@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deepmerge@^4.3.1: version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== define-data-property@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: es-define-property "^1.0.0" @@ -1171,32 +1171,32 @@ define-data-property@^1.1.4: delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== depd@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== destroy@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-libc@^2.0.0, detect-libc@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== diff@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== digest-fetch@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/digest-fetch/-/digest-fetch-1.3.0.tgz#898e69264d00012a23cf26e8a3e40320143fc661" + resolved "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.3.0.tgz#898e69264d00012a23cf26e8a3e40320143fc661" integrity sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA== dependencies: base-64 "^0.1.0" @@ -1204,7 +1204,7 @@ digest-fetch@^1.3.0: dom-serializer@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== dependencies: domelementtype "^2.3.0" @@ -1213,19 +1213,19 @@ dom-serializer@^2.0.0: domelementtype@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== dependencies: domelementtype "^2.3.0" domutils@^3.0.1: version "3.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + resolved "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== dependencies: dom-serializer "^2.0.0" @@ -1234,12 +1234,12 @@ domutils@^3.0.1: dotenv@^16.4.5: version "16.4.5" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== drizzle-kit@^0.22.7: version "0.22.7" - resolved "https://registry.yarnpkg.com/drizzle-kit/-/drizzle-kit-0.22.7.tgz#4339c3e24c6555ea8cbad605f005b3db3e604a9c" + resolved "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.22.7.tgz#4339c3e24c6555ea8cbad605f005b3db3e604a9c" integrity sha512-9THPCb2l1GPt7wxhws9LvTR0YG565ZlVgTuqGMwjs590Kch1pXu4GyjEArVijSF5m0OBj3qgdeKmuJXhKXgWFw== dependencies: "@esbuild-kit/esm-loader" "^2.5.5" @@ -1248,58 +1248,58 @@ drizzle-kit@^0.22.7: drizzle-orm@^0.31.2: version "0.31.2" - resolved "https://registry.yarnpkg.com/drizzle-orm/-/drizzle-orm-0.31.2.tgz#221a257dd487bab49ddb88a17bd82388600cf655" + resolved "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.31.2.tgz#221a257dd487bab49ddb88a17bd82388600cf655" integrity sha512-QnenevbnnAzmbNzQwbhklvIYrDE8YER8K7kSrAWQSV1YvFCdSQPzj+jzqRdTSsV2cDqSpQ0NXGyL1G9I43LDLg== ee-first@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== enabled@2.0.x: version "2.0.0" - resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" entities@^4.2.0, entities@^4.4.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== es-define-property@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== dependencies: get-intrinsic "^1.2.4" es-errors@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== esbuild-register@^3.5.0: version "3.5.0" - resolved "https://registry.yarnpkg.com/esbuild-register/-/esbuild-register-3.5.0.tgz#449613fb29ab94325c722f560f800dd946dc8ea8" + resolved "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz#449613fb29ab94325c722f560f800dd946dc8ea8" integrity sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A== dependencies: debug "^4.3.4" esbuild@^0.19.7: version "0.19.12" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== optionalDependencies: "@esbuild/aix-ppc64" "0.19.12" @@ -1328,7 +1328,7 @@ esbuild@^0.19.7: esbuild@~0.18.20: version "0.18.20" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== optionalDependencies: "@esbuild/android-arm" "0.18.20" @@ -1356,37 +1356,37 @@ esbuild@~0.18.20: escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== etag@~1.8.1: version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== event-target-shim@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== eventemitter3@^4.0.4: version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== expand-template@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== expr-eval@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/expr-eval/-/expr-eval-2.0.2.tgz#fa6f044a7b0c93fde830954eb9c5b0f7fbc7e201" + resolved "https://registry.npmjs.org/expr-eval/-/expr-eval-2.0.2.tgz#fa6f044a7b0c93fde830954eb9c5b0f7fbc7e201" integrity sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg== express@^4.19.2: version "4.19.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" + resolved "https://registry.npmjs.org/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== dependencies: accepts "~1.3.8" @@ -1423,36 +1423,36 @@ express@^4.19.2: fast-fifo@^1.1.0, fast-fifo@^1.2.0: version "1.3.2" - resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + resolved "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== fast-xml-parser@^4.3.5: version "4.4.0" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz#341cc98de71e9ba9e651a67f41f1752d1441a501" + resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz#341cc98de71e9ba9e651a67f41f1752d1441a501" integrity sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg== dependencies: strnum "^1.0.5" fecha@^4.2.0: version "4.2.3" - resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== file-uri-to-path@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" finalhandler@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: debug "2.6.9" @@ -1465,32 +1465,32 @@ finalhandler@1.2.0: flat@^5.0.2: version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatbuffers@^1.12.0: version "1.12.0" - resolved "https://registry.yarnpkg.com/flatbuffers/-/flatbuffers-1.12.0.tgz#72e87d1726cb1b216e839ef02658aa87dcef68aa" + resolved "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz#72e87d1726cb1b216e839ef02658aa87dcef68aa" integrity sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ== fn.name@1.x.x: version "1.1.0" - resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== follow-redirects@^1.15.6: version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== form-data-encoder@1.7.2: version "1.7.2" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" + resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A== form-data@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" @@ -1499,7 +1499,7 @@ form-data@^4.0.0: formdata-node@^4.3.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2" + resolved "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2" integrity sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ== dependencies: node-domexception "1.0.0" @@ -1507,32 +1507,32 @@ formdata-node@^4.3.2: forwarded@0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fresh@0.5.2: version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-constants@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== fsevents@~2.3.2: version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: es-errors "^1.3.0" @@ -1543,67 +1543,67 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: get-tsconfig@^4.7.0: version "4.7.5" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.5.tgz#5e012498579e9a6947511ed0cd403272c7acbbaf" + resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz#5e012498579e9a6947511ed0cd403272c7acbbaf" integrity sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw== dependencies: resolve-pkg-maps "^1.0.0" github-from-package@0.0.0: version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" gopd@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" guid-typescript@^1.0.9: version "1.0.9" - resolved "https://registry.yarnpkg.com/guid-typescript/-/guid-typescript-1.0.9.tgz#e35f77003535b0297ea08548f5ace6adb1480ddc" + resolved "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz#e35f77003535b0297ea08548f5ace6adb1480ddc" integrity sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-property-descriptors@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: es-define-property "^1.0.0" has-proto@^1.0.1: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== hasown@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" html-to-text@^9.0.5: version "9.0.5" - resolved "https://registry.yarnpkg.com/html-to-text/-/html-to-text-9.0.5.tgz#6149a0f618ae7a0db8085dca9bbf96d32bb8368d" + resolved "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz#6149a0f618ae7a0db8085dca9bbf96d32bb8368d" integrity sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg== dependencies: "@selderee/plugin-htmlparser2" "^0.11.0" @@ -1614,7 +1614,7 @@ html-to-text@^9.0.5: htmlparser2@^8.0.2: version "8.0.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== dependencies: domelementtype "^2.3.0" @@ -1624,7 +1624,7 @@ htmlparser2@^8.0.2: http-errors@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -1635,121 +1635,121 @@ http-errors@2.0.0: humanize-ms@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" iconv-lite@0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" ieee754@^1.1.13: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore-by-default@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@~1.3.0: version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-any-array@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-any-array/-/is-any-array-2.0.1.tgz#9233242a9c098220290aa2ec28f82ca7fa79899e" + resolved "https://registry.npmjs.org/is-any-array/-/is-any-array-2.0.1.tgz#9233242a9c098220290aa2ec28f82ca7fa79899e" integrity sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ== is-arrayish@^0.3.1: version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-buffer@~1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== js-tiktoken@^1.0.12: version "1.0.12" - resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.12.tgz#af0f5cf58e5e7318240d050c8413234019424211" + resolved "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.12.tgz#af0f5cf58e5e7318240d050c8413234019424211" integrity sha512-L7wURW1fH9Qaext0VzaUDpFGVQgjkdE3Dgsy9/+yXyGEpBKnylTd0mU0bfbNkKDlXRb6TEsZkwuflu1B8uQbJQ== dependencies: base64-js "^1.5.1" js-tiktoken@^1.0.7, js-tiktoken@^1.0.8: version "1.0.10" - resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.10.tgz#2b343ec169399dcee8f9ef9807dbd4fafd3b30dc" + resolved "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.10.tgz#2b343ec169399dcee8f9ef9807dbd4fafd3b30dc" integrity sha512-ZoSxbGjvGyMT13x6ACo9ebhDha/0FHdKA+OsQcMOWcm1Zs7r90Rhk5lhERLzji+3rA7EKpXCgwXcM5fF3DMpdA== dependencies: base64-js "^1.5.1" js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsonpointer@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" + resolved "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== kuler@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== langchain@0.2.3: version "0.2.3" - resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.2.3.tgz#c14bb05cf871b21bd63b84b3ab89580b1d62539f" + resolved "https://registry.npmjs.org/langchain/-/langchain-0.2.3.tgz#c14bb05cf871b21bd63b84b3ab89580b1d62539f" integrity sha512-T9xR7zd+Nj0oXy6WoYKmZLy0DlQiDLFPGYWdOXDxy+AvqlujoPdVQgDSpdqiOHvAjezrByAoKxoHCz5XMwTP/Q== dependencies: "@langchain/core" "~0.2.0" @@ -1771,7 +1771,7 @@ langchain@0.2.3: langchain@^0.1.30: version "0.1.30" - resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.1.30.tgz#e1adb3f1849fcd5c596c668300afd5dc8cb37a97" + resolved "https://registry.npmjs.org/langchain/-/langchain-0.1.30.tgz#e1adb3f1849fcd5c596c668300afd5dc8cb37a97" integrity sha512-5h/vNMmutQ98tbB0sPDlAileZVca6A2McFgGa3+D56Dm8mSSCzTQL2DngPA6h09DlKDpSr7+6PdFw5Hoj0ZDSw== dependencies: "@anthropic-ai/sdk" "^0.9.1" @@ -1794,12 +1794,12 @@ langchain@^0.1.30: langchainhub@~0.0.8: version "0.0.8" - resolved "https://registry.yarnpkg.com/langchainhub/-/langchainhub-0.0.8.tgz#fd4b96dc795e22e36c1a20bad31b61b0c33d3110" + resolved "https://registry.npmjs.org/langchainhub/-/langchainhub-0.0.8.tgz#fd4b96dc795e22e36c1a20bad31b61b0c33d3110" integrity sha512-Woyb8YDHgqqTOZvWIbm2CaFDGfZ4NTSyXV687AG4vXEfoNo7cGQp7nhl7wL3ehenKWmNEmcxCLgOZzW8jE6lOQ== langsmith@~0.1.1, langsmith@~0.1.7: version "0.1.14" - resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.1.14.tgz#2b889dbcfb49547614df276a4a5a063092a1585d" + resolved "https://registry.npmjs.org/langsmith/-/langsmith-0.1.14.tgz#2b889dbcfb49547614df276a4a5a063092a1585d" integrity sha512-iEzQLLB7/0nRpAwNBAR7B7N64fyByg5UsNjSvLaCCkQ9AS68PSafjB8xQkyI8QXXrGjU1dEqDRoa8m4SUuRdUw== dependencies: "@types/uuid" "^9.0.1" @@ -1810,7 +1810,7 @@ langsmith@~0.1.1, langsmith@~0.1.7: langsmith@~0.1.30: version "0.1.34" - resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.1.34.tgz#801310495fef258ed9c22bb5575120e2c06d51cf" + resolved "https://registry.npmjs.org/langsmith/-/langsmith-0.1.34.tgz#801310495fef258ed9c22bb5575120e2c06d51cf" integrity sha512-aMv2k8kEaovhTuZnK6/6DMCoM7Jurvm1AzdESn+yN+HramRxp3sK32jFRz3ogkXP6GjAjOIofcnNkzhHXSUXGA== dependencies: "@types/uuid" "^9.0.1" @@ -1822,17 +1822,17 @@ langsmith@~0.1.30: leac@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/leac/-/leac-0.6.0.tgz#dcf136e382e666bd2475f44a1096061b70dc0912" + resolved "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz#dcf136e382e666bd2475f44a1096061b70dc0912" integrity sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg== lodash.set@^4.3.2: version "4.3.2" - resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + resolved "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" integrity sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg== logform@^2.3.2, logform@^2.4.0: version "2.6.0" - resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5" + resolved "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5" integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ== dependencies: "@colors/colors" "1.6.0" @@ -1844,24 +1844,24 @@ logform@^2.3.2, logform@^2.4.0: long@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + resolved "https://registry.npmjs.org/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" make-error@^1.1.1: version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== md5@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + resolved "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== dependencies: charenc "0.0.2" @@ -1870,80 +1870,80 @@ md5@^2.3.0: media-typer@0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== merge-descriptors@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== methods@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== mime-db@1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime@1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mimic-response@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimist@^1.2.0, minimist@^1.2.3: version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== ml-array-mean@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/ml-array-mean/-/ml-array-mean-1.1.6.tgz#d951a700dc8e3a17b3e0a583c2c64abd0c619c56" + resolved "https://registry.npmjs.org/ml-array-mean/-/ml-array-mean-1.1.6.tgz#d951a700dc8e3a17b3e0a583c2c64abd0c619c56" integrity sha512-MIdf7Zc8HznwIisyiJGRH9tRigg3Yf4FldW8DxKxpCCv/g5CafTw0RRu51nojVEOXuCQC7DRVVu5c7XXO/5joQ== dependencies: ml-array-sum "^1.1.6" ml-array-sum@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/ml-array-sum/-/ml-array-sum-1.1.6.tgz#d1d89c20793cd29c37b09d40e85681aa4515a955" + resolved "https://registry.npmjs.org/ml-array-sum/-/ml-array-sum-1.1.6.tgz#d1d89c20793cd29c37b09d40e85681aa4515a955" integrity sha512-29mAh2GwH7ZmiRnup4UyibQZB9+ZLyMShvt4cH4eTK+cL2oEMIZFnSyB3SS8MlsTh6q/w/yh48KmqLxmovN4Dw== dependencies: is-any-array "^2.0.0" ml-distance-euclidean@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ml-distance-euclidean/-/ml-distance-euclidean-2.0.0.tgz#3a668d236649d1b8fec96380b9435c6f42c9a817" + resolved "https://registry.npmjs.org/ml-distance-euclidean/-/ml-distance-euclidean-2.0.0.tgz#3a668d236649d1b8fec96380b9435c6f42c9a817" integrity sha512-yC9/2o8QF0A3m/0IXqCTXCzz2pNEzvmcE/9HFKOZGnTjatvBbsn4lWYJkxENkA4Ug2fnYl7PXQxnPi21sgMy/Q== ml-distance@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/ml-distance/-/ml-distance-4.0.1.tgz#4741d17a1735888c5388823762271dfe604bd019" + resolved "https://registry.npmjs.org/ml-distance/-/ml-distance-4.0.1.tgz#4741d17a1735888c5388823762271dfe604bd019" integrity sha512-feZ5ziXs01zhyFUUUeZV5hwc0f5JW0Sh0ckU1koZe/wdVkJdGxcP06KNQuF0WBTj8FttQUzcvQcpcrOp/XrlEw== dependencies: ml-array-mean "^1.1.6" @@ -1952,7 +1952,7 @@ ml-distance@^4.0.0: ml-tree-similarity@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/ml-tree-similarity/-/ml-tree-similarity-1.0.0.tgz#24705a107e32829e24d945e87219e892159c53f0" + resolved "https://registry.npmjs.org/ml-tree-similarity/-/ml-tree-similarity-1.0.0.tgz#24705a107e32829e24d945e87219e892159c53f0" integrity sha512-XJUyYqjSuUQkNQHMscr6tcjldsOoAekxADTplt40QKfwW6nd++1wHWV9AArl0Zvw/TIHgNaZZNvr8QGvE8wLRg== dependencies: binary-search "^1.3.5" @@ -1960,66 +1960,66 @@ ml-tree-similarity@^1.0.0: ms@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@2.1.3, ms@^2.0.0, ms@^2.1.1: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mustache@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" + resolved "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== napi-build-utils@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== negotiator@0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== node-abi@^3.3.0: version "3.62.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.62.0.tgz#017958ed120f89a3a14a7253da810f5d724e3f36" + resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.62.0.tgz#017958ed120f89a3a14a7253da810f5d724e3f36" integrity sha512-CPMcGa+y33xuL1E0TcNIu4YyaZCxnnvkVaEXrsosR3FxN+fV8xvb7Mzpb7IgKler10qeMkE6+Dp8qJhpzdq35g== dependencies: semver "^7.3.5" node-addon-api@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== node-domexception@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + resolved "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== node-ensure@^0.0.0: version "0.0.0" - resolved "https://registry.yarnpkg.com/node-ensure/-/node-ensure-0.0.0.tgz#ecae764150de99861ec5c810fd5d096b183932a7" + resolved "https://registry.npmjs.org/node-ensure/-/node-ensure-0.0.0.tgz#ecae764150de99861ec5c810fd5d096b183932a7" integrity sha512-DRI60hzo2oKN1ma0ckc6nQWlHU69RH6xN0sjQTjMpChPfTYvKZdcQFfdYK2RWbJcKyUizSIy/l8OTGxMAM1QDw== node-fetch@^2.6.7: version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" nodemon@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.0.tgz#ff7394f2450eb6a5e96fe4180acd5176b29799c9" + resolved "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz#ff7394f2450eb6a5e96fe4180acd5176b29799c9" integrity sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA== dependencies: chokidar "^3.5.2" @@ -2035,74 +2035,74 @@ nodemon@^3.1.0: nopt@~1.0.10: version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== dependencies: abbrev "1" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== num-sort@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/num-sort/-/num-sort-2.1.0.tgz#1cbb37aed071329fdf41151258bc011898577a9b" + resolved "https://registry.npmjs.org/num-sort/-/num-sort-2.1.0.tgz#1cbb37aed071329fdf41151258bc011898577a9b" integrity sha512-1MQz1Ed8z2yckoBeSfkQHHO9K1yDRxxtotKSJ9yvcTUUxSvfvzEq5GwBrjjHEpMlq/k5gvXdmJ1SbYxWtpNoVg== object-assign@^4: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.13.1: version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== on-finished@2.4.1: version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" one-time@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== dependencies: fn.name "1.x.x" onnx-proto@^4.0.4: version "4.0.4" - resolved "https://registry.yarnpkg.com/onnx-proto/-/onnx-proto-4.0.4.tgz#2431a25bee25148e915906dda0687aafe3b9e044" + resolved "https://registry.npmjs.org/onnx-proto/-/onnx-proto-4.0.4.tgz#2431a25bee25148e915906dda0687aafe3b9e044" integrity sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA== dependencies: protobufjs "^6.8.8" onnxruntime-common@~1.14.0: version "1.14.0" - resolved "https://registry.yarnpkg.com/onnxruntime-common/-/onnxruntime-common-1.14.0.tgz#2bb5dac5261269779aa5fb6536ca379657de8bf6" + resolved "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.14.0.tgz#2bb5dac5261269779aa5fb6536ca379657de8bf6" integrity sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew== onnxruntime-node@1.14.0: version "1.14.0" - resolved "https://registry.yarnpkg.com/onnxruntime-node/-/onnxruntime-node-1.14.0.tgz#c4ae6c355cfae7d83abaf36dd39a905c4a010217" + resolved "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.14.0.tgz#c4ae6c355cfae7d83abaf36dd39a905c4a010217" integrity sha512-5ba7TWomIV/9b6NH/1x/8QEeowsb+jBEvFzU6z0T4mNsFwdPqXeFUM7uxC6QeSRkEbWu3qEB0VMjrvzN/0S9+w== dependencies: onnxruntime-common "~1.14.0" onnxruntime-web@1.14.0: version "1.14.0" - resolved "https://registry.yarnpkg.com/onnxruntime-web/-/onnxruntime-web-1.14.0.tgz#c8cee538781b1d4c1c6b043934f4a3e6ddf1466e" + resolved "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.14.0.tgz#c8cee538781b1d4c1c6b043934f4a3e6ddf1466e" integrity sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw== dependencies: flatbuffers "^1.12.0" @@ -2114,7 +2114,7 @@ onnxruntime-web@1.14.0: openai@^4.26.0: version "4.31.0" - resolved "https://registry.yarnpkg.com/openai/-/openai-4.31.0.tgz#5d96045c4eb244fa21f0fff0981043a2c9f09e8c" + resolved "https://registry.npmjs.org/openai/-/openai-4.31.0.tgz#5d96045c4eb244fa21f0fff0981043a2c9f09e8c" integrity sha512-JebkRnRGEGLnJt3+bJ5B7au8nBeZvJjs9baVxDmUZ5+BgafAdy6KDxJGSuyaw/IA+ErqY3jmOH5cDC2mCDJF2w== dependencies: "@types/node" "^18.11.18" @@ -2129,7 +2129,7 @@ openai@^4.26.0: openai@^4.41.1, openai@^4.49.1: version "4.52.2" - resolved "https://registry.yarnpkg.com/openai/-/openai-4.52.2.tgz#5d67271f3df84c0b54676b08990eaa9402151759" + resolved "https://registry.npmjs.org/openai/-/openai-4.52.2.tgz#5d67271f3df84c0b54676b08990eaa9402151759" integrity sha512-mMc0XgFuVSkcm0lRIi8zaw++otC82ZlfkCur1qguXYWPETr/+ZwL9A/vvp3YahX+shpaT6j03dwsmUyLAfmEfg== dependencies: "@types/node" "^18.11.18" @@ -2143,17 +2143,17 @@ openai@^4.41.1, openai@^4.49.1: openapi-types@^12.1.3: version "12.1.3" - resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-12.1.3.tgz#471995eb26c4b97b7bd356aacf7b91b73e777dd3" + resolved "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz#471995eb26c4b97b7bd356aacf7b91b73e777dd3" integrity sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw== p-finally@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== p-queue@^6.6.2: version "6.6.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== dependencies: eventemitter3 "^4.0.4" @@ -2161,7 +2161,7 @@ p-queue@^6.6.2: p-retry@4: version "4.6.2" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + resolved "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== dependencies: "@types/retry" "0.12.0" @@ -2169,14 +2169,14 @@ p-retry@4: p-timeout@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== dependencies: p-finally "^1.0.0" parseley@^0.12.0: version "0.12.1" - resolved "https://registry.yarnpkg.com/parseley/-/parseley-0.12.1.tgz#4afd561d50215ebe259e3e7a853e62f600683aef" + resolved "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz#4afd561d50215ebe259e3e7a853e62f600683aef" integrity sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw== dependencies: leac "^0.6.0" @@ -2184,17 +2184,17 @@ parseley@^0.12.0: parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-to-regexp@0.1.7: version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== pdf-parse@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/pdf-parse/-/pdf-parse-1.1.1.tgz#745e07408679548b3995ff896fd38e96e19d14a7" + resolved "https://registry.npmjs.org/pdf-parse/-/pdf-parse-1.1.1.tgz#745e07408679548b3995ff896fd38e96e19d14a7" integrity sha512-v6ZJ/efsBpGrGGknjtq9J/oC8tZWq0KWL5vQrk2GlzLEQPUDB1ex+13Rmidl1neNN358Jn9EHZw5y07FFtaC7A== dependencies: debug "^3.1.0" @@ -2202,22 +2202,22 @@ pdf-parse@^1.1.1: peberminta@^0.9.0: version "0.9.0" - resolved "https://registry.yarnpkg.com/peberminta/-/peberminta-0.9.0.tgz#8ec9bc0eb84b7d368126e71ce9033501dca2a352" + resolved "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz#8ec9bc0eb84b7d368126e71ce9033501dca2a352" integrity sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ== picomatch@^2.0.4, picomatch@^2.2.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== platform@^1.3.6: version "1.3.6" - resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" + resolved "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== prebuild-install@^7.1.1: version "7.1.2" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" + resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== dependencies: detect-libc "^2.0.0" @@ -2235,12 +2235,12 @@ prebuild-install@^7.1.1: prettier@^3.2.5: version "3.2.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== protobufjs@^6.8.8: version "6.11.4" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" + resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== dependencies: "@protobufjs/aspromise" "^1.1.2" @@ -2259,7 +2259,7 @@ protobufjs@^6.8.8: proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" @@ -2267,17 +2267,17 @@ proxy-addr@~2.0.7: proxy-from-env@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pstree.remy@^1.1.8: version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== pump@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" @@ -2285,24 +2285,24 @@ pump@^3.0.0: qs@6.11.0: version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" queue-tick@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" + resolved "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@2.5.2: version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" @@ -2312,7 +2312,7 @@ raw-body@2.5.2: rc@^1.2.7: version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" @@ -2322,7 +2322,7 @@ rc@^1.2.7: readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -2331,58 +2331,58 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" resolve-pkg-maps@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== retry@^0.13.1: version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-stable-stringify@^2.3.1: version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== "safer-buffer@>= 2.1.2 < 3": version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== selderee@^0.11.0: version "0.11.0" - resolved "https://registry.yarnpkg.com/selderee/-/selderee-0.11.0.tgz#6af0c7983e073ad3e35787ffe20cefd9daf0ec8a" + resolved "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz#6af0c7983e073ad3e35787ffe20cefd9daf0ec8a" integrity sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA== dependencies: parseley "^0.12.0" semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" send@0.18.0: version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" @@ -2401,7 +2401,7 @@ send@0.18.0: serve-static@1.15.0: version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" @@ -2411,7 +2411,7 @@ serve-static@1.15.0: set-function-length@^1.2.1: version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: define-data-property "^1.1.4" @@ -2423,12 +2423,12 @@ set-function-length@^1.2.1: setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sharp@^0.32.0: version "0.32.6" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.6.tgz#6ad30c0b7cd910df65d5f355f774aa4fce45732a" + resolved "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz#6ad30c0b7cd910df65d5f355f774aa4fce45732a" integrity sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w== dependencies: color "^4.2.3" @@ -2442,7 +2442,7 @@ sharp@^0.32.0: side-channel@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: call-bind "^1.0.7" @@ -2452,12 +2452,12 @@ side-channel@^1.0.4: simple-concat@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== simple-get@^4.0.0, simple-get@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== dependencies: decompress-response "^6.0.0" @@ -2466,21 +2466,21 @@ simple-get@^4.0.0, simple-get@^4.0.1: simple-swizzle@^0.2.2: version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== dependencies: is-arrayish "^0.3.1" simple-update-notifier@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" + resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== dependencies: semver "^7.5.3" source-map-support@^0.5.21: version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -2488,22 +2488,22 @@ source-map-support@^0.5.21: source-map@^0.6.0: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== stack-trace@0.0.x: version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== statuses@2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== streamx@^2.15.0, streamx@^2.16.1: version "2.16.1" - resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.16.1.tgz#2b311bd34832f08aa6bb4d6a80297c9caef89614" + resolved "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz#2b311bd34832f08aa6bb4d6a80297c9caef89614" integrity sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ== dependencies: fast-fifo "^1.1.0" @@ -2513,31 +2513,31 @@ streamx@^2.15.0, streamx@^2.16.1: string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" strip-json-comments@~2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== strnum@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" + resolved "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== supports-color@^5.5.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" tar-fs@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== dependencies: chownr "^1.1.1" @@ -2547,7 +2547,7 @@ tar-fs@^2.0.0: tar-fs@^3.0.4: version "3.0.6" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.6.tgz#eaccd3a67d5672f09ca8e8f9c3d2b89fa173f217" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz#eaccd3a67d5672f09ca8e8f9c3d2b89fa173f217" integrity sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w== dependencies: pump "^3.0.0" @@ -2558,7 +2558,7 @@ tar-fs@^3.0.4: tar-stream@^2.1.4: version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: bl "^4.0.3" @@ -2569,7 +2569,7 @@ tar-stream@^2.1.4: tar-stream@^3.1.5: version "3.1.7" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== dependencies: b4a "^1.6.4" @@ -2578,41 +2578,41 @@ tar-stream@^3.1.5: text-hex@1.0.x: version "1.0.0" - resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + resolved "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== touch@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== dependencies: nopt "~1.0.10" tr46@~0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== triple-beam@^1.3.0: version "1.4.1" - resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" + resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== ts-node@^10.9.2: version "10.9.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -2631,14 +2631,14 @@ ts-node@^10.9.2: tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" type-is@~1.6.18: version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" @@ -2646,82 +2646,82 @@ type-is@~1.6.18: typescript@^5.4.3: version "5.4.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== undefsafe@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== undici-types@~5.26.4: version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== util-deprecate@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid@^10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" + resolved "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== uuid@^9.0.0: version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== validate.io-array@^1.0.3, validate.io-array@^1.0.5: version "1.0.6" - resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d" + resolved "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d" integrity sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg== validate.io-function@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/validate.io-function/-/validate.io-function-1.0.2.tgz#343a19802ed3b1968269c780e558e93411c0bad7" + resolved "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz#343a19802ed3b1968269c780e558e93411c0bad7" integrity sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ== vary@^1, vary@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== web-streams-polyfill@4.0.0-beta.3: version "4.0.0-beta.3" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38" + resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38" integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug== web-streams-polyfill@^3.2.1: version "3.3.3" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -2729,7 +2729,7 @@ whatwg-url@^5.0.0: winston-transport@^4.7.0: version "4.7.0" - resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.7.0.tgz#e302e6889e6ccb7f383b926df6936a5b781bd1f0" + resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz#e302e6889e6ccb7f383b926df6936a5b781bd1f0" integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg== dependencies: logform "^2.3.2" @@ -2738,7 +2738,7 @@ winston-transport@^4.7.0: winston@^3.13.0: version "3.13.0" - resolved "https://registry.yarnpkg.com/winston/-/winston-3.13.0.tgz#e76c0d722f78e04838158c61adc1287201de7ce3" + resolved "https://registry.npmjs.org/winston/-/winston-3.13.0.tgz#e76c0d722f78e04838158c61adc1287201de7ce3" integrity sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ== dependencies: "@colors/colors" "^1.6.0" @@ -2755,40 +2755,40 @@ winston@^3.13.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@^8.17.1: version "8.17.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + resolved "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^2.2.1: version "2.4.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed" integrity sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg== yn@3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== zod-to-json-schema@^3.22.3: version "3.22.5" - resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.22.5.tgz#3646e81cfc318dbad2a22519e5ce661615418673" + resolved "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.22.5.tgz#3646e81cfc318dbad2a22519e5ce661615418673" integrity sha512-+akaPo6a0zpVCCseDed504KBJUQpEW5QZw7RMneNmKw+fGaML1Z9tUNLnHHAC8x6dzVRO1eB2oEMyZRnuBZg7Q== zod-to-json-schema@^3.22.4, zod-to-json-schema@^3.22.5: version "3.23.1" - resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.23.1.tgz#5225925b8ed5fa20096bd99be076c4b29b53d309" + resolved "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.23.1.tgz#5225925b8ed5fa20096bd99be076c4b29b53d309" integrity sha512-oT9INvydob1XV0v1d2IadrR74rLtDInLvDFfAa1CG0Pmg/vxATk7I2gSelfj271mbzeM4Da0uuDQE/Nkj3DWNw== zod@^3.22.3, zod@^3.22.4: version "3.22.4" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" + resolved "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== From 36bb265e1f6d88d21fd9b838ea152a2243e829de Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 18 Oct 2024 12:27:56 +0530 Subject: [PATCH 056/115] feat(dockerfile): revert base image --- backend.dockerfile | 2 +- yarn.lock | 806 ++++++++++++++++++++++----------------------- 2 files changed, 404 insertions(+), 404 deletions(-) diff --git a/backend.dockerfile b/backend.dockerfile index c25ddd8..e835b40 100644 --- a/backend.dockerfile +++ b/backend.dockerfile @@ -1,4 +1,4 @@ -FROM node:18-slim +FROM node:20-buster WORKDIR /home/perplexica diff --git a/yarn.lock b/yarn.lock index 502dc90..deb35ea 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,7 +4,7 @@ "@anthropic-ai/sdk@^0.22.0": version "0.22.0" - resolved "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.22.0.tgz#548e4218d9810fd494e595d4e57cb2d46d301a1a" + resolved "https://registry.yarnpkg.com/@anthropic-ai/sdk/-/sdk-0.22.0.tgz#548e4218d9810fd494e595d4e57cb2d46d301a1a" integrity sha512-dv4BCC6FZJw3w66WNLsHlUFjhu19fS1L/5jMPApwhZLa/Oy1j0A2i3RypmDtHEPp4Wwg3aZkSHksp7VzYWjzmw== dependencies: "@types/node" "^18.11.18" @@ -18,7 +18,7 @@ "@anthropic-ai/sdk@^0.9.1": version "0.9.1" - resolved "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.9.1.tgz#b2d2b7bf05c90dce502c9a2e869066870f69ba88" + resolved "https://registry.yarnpkg.com/@anthropic-ai/sdk/-/sdk-0.9.1.tgz#b2d2b7bf05c90dce502c9a2e869066870f69ba88" integrity sha512-wa1meQ2WSfoY8Uor3EdrJq0jTiZJoKoSii2ZVWRY1oN4Tlr5s59pADg9T79FTbPe1/se5c3pBeZgJL63wmuoBA== dependencies: "@types/node" "^18.11.18" @@ -33,19 +33,19 @@ "@colors/colors@1.6.0", "@colors/colors@^1.6.0": version "1.6.0" - resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" "@dabh/diagnostics@^2.0.2": version "2.0.3" - resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== dependencies: colorspace "1.1.x" @@ -54,7 +54,7 @@ "@esbuild-kit/core-utils@^3.3.2": version "3.3.2" - resolved "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz#186b6598a5066f0413471d7c4d45828e399ba96c" + resolved "https://registry.yarnpkg.com/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz#186b6598a5066f0413471d7c4d45828e399ba96c" integrity sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ== dependencies: esbuild "~0.18.20" @@ -62,7 +62,7 @@ "@esbuild-kit/esm-loader@^2.5.5": version "2.6.5" - resolved "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz#6eedee46095d7d13b1efc381e2211ed1c60e64ea" + resolved "https://registry.yarnpkg.com/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz#6eedee46095d7d13b1efc381e2211ed1c60e64ea" integrity sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA== dependencies: "@esbuild-kit/core-utils" "^3.3.2" @@ -70,252 +70,252 @@ "@esbuild/aix-ppc64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== "@esbuild/android-arm64@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== "@esbuild/android-arm64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== "@esbuild/android-arm@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== "@esbuild/android-arm@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== "@esbuild/android-x64@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== "@esbuild/android-x64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== "@esbuild/darwin-arm64@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== "@esbuild/darwin-arm64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== "@esbuild/darwin-x64@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== "@esbuild/darwin-x64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== "@esbuild/freebsd-arm64@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== "@esbuild/freebsd-arm64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== "@esbuild/freebsd-x64@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== "@esbuild/freebsd-x64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== "@esbuild/linux-arm64@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== "@esbuild/linux-arm64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== "@esbuild/linux-arm@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== "@esbuild/linux-arm@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== "@esbuild/linux-ia32@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== "@esbuild/linux-ia32@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== "@esbuild/linux-loong64@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== "@esbuild/linux-loong64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== "@esbuild/linux-mips64el@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== "@esbuild/linux-mips64el@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== "@esbuild/linux-ppc64@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== "@esbuild/linux-ppc64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== "@esbuild/linux-riscv64@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== "@esbuild/linux-riscv64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== "@esbuild/linux-s390x@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== "@esbuild/linux-s390x@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== "@esbuild/linux-x64@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== "@esbuild/linux-x64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== "@esbuild/netbsd-x64@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== "@esbuild/netbsd-x64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== "@esbuild/openbsd-x64@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== "@esbuild/openbsd-x64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== "@esbuild/sunos-x64@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== "@esbuild/sunos-x64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== "@esbuild/win32-arm64@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== "@esbuild/win32-arm64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== "@esbuild/win32-ia32@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== "@esbuild/win32-ia32@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== "@esbuild/win32-x64@0.18.20": version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== "@esbuild/win32-x64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== "@huggingface/jinja@^0.2.2": version "0.2.2" - resolved "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.2.2.tgz#faeb205a9d6995089bef52655ddd8245d3190627" + resolved "https://registry.yarnpkg.com/@huggingface/jinja/-/jinja-0.2.2.tgz#faeb205a9d6995089bef52655ddd8245d3190627" integrity sha512-/KPde26khDUIPkTGU82jdtTW9UAuvUTumCAbFs/7giR0SxsvZC4hru51PBvpijH6BVkHcROcvZM/lpy5h1jRRA== "@iarna/toml@^2.2.5": version "2.2.5" - resolved "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" + resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== "@jridgewell/resolve-uri@^3.0.3": version "3.1.2" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" @@ -323,7 +323,7 @@ "@langchain/anthropic@^0.2.3": version "0.2.3" - resolved "https://registry.npmjs.org/@langchain/anthropic/-/anthropic-0.2.3.tgz#1505da939f47c90e53dfede0407c497b8177bdf0" + resolved "https://registry.yarnpkg.com/@langchain/anthropic/-/anthropic-0.2.3.tgz#1505da939f47c90e53dfede0407c497b8177bdf0" integrity sha512-f2fqzLGcvsXXUyZ1vl8cgwkKDGLshOGrPuR9hkhGuBG5m91eq755OqPBxWJuS1TFtNU813cXft3xh0MQbxavwg== dependencies: "@anthropic-ai/sdk" "^0.22.0" @@ -334,7 +334,7 @@ "@langchain/community@^0.2.16": version "0.2.16" - resolved "https://registry.npmjs.org/@langchain/community/-/community-0.2.16.tgz#5888baf7fc7ea272c5f91aaa0e71bc444167262d" + resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.2.16.tgz#5888baf7fc7ea272c5f91aaa0e71bc444167262d" integrity sha512-dFDcMabKACvuRd0w6EIRLWf1ubPGZEeEwFt9v1jiEr4HCFxH0OF+iM1QUCcVRbB2fK5lqmKeTD1XAeZV8+AyXA== dependencies: "@langchain/core" "~0.2.11" @@ -351,7 +351,7 @@ "@langchain/community@~0.0.41": version "0.0.43" - resolved "https://registry.npmjs.org/@langchain/community/-/community-0.0.43.tgz#017e2f9b3209b3999482f10df5aec2520731a63c" + resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.0.43.tgz#017e2f9b3209b3999482f10df5aec2520731a63c" integrity sha512-60TjV3knGGOPHfbJxLpuwARr8oA0r6Txm8wTFvFx+TjRUrloyBUcWSbJIdm62gAwBJDEHmdjjyWOOzU+eewcuA== dependencies: "@langchain/core" "~0.1.44" @@ -364,7 +364,7 @@ "@langchain/core@>0.1.56 <0.3.0", "@langchain/core@>0.2.0 <0.3.0", "@langchain/core@>=0.2.5 <0.3.0", "@langchain/core@~0.2.0", "@langchain/core@~0.2.11": version "0.2.11" - resolved "https://registry.npmjs.org/@langchain/core/-/core-0.2.11.tgz#5f47467e20e56b250831baef20083657c6facb4c" + resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.2.11.tgz#5f47467e20e56b250831baef20083657c6facb4c" integrity sha512-d4SNL7WI0c3oHrV4WxCRH1/TNqdePXEzYjYwIb4aEH6lW1aM0utGhLbNthX+aYkOL4Ynx2FoG4h91ECIipiKWQ== dependencies: ansi-styles "^5.0.0" @@ -382,7 +382,7 @@ "@langchain/core@>=0.2.9 <0.3.0": version "0.2.15" - resolved "https://registry.npmjs.org/@langchain/core/-/core-0.2.15.tgz#1bb99ac4fffe935c7ba37edcaa91abfba3c82219" + resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.2.15.tgz#1bb99ac4fffe935c7ba37edcaa91abfba3c82219" integrity sha512-L096itIBQ5XNsy5BCCPqIQEk/x4rzI+U4BhYT+fDBYtljESshIi/WzXdmiGfY/6MpVjB76jNuaRgMDmo1m9NeQ== dependencies: ansi-styles "^5.0.0" @@ -400,7 +400,7 @@ "@langchain/core@~0.1.44", "@langchain/core@~0.1.45": version "0.1.52" - resolved "https://registry.npmjs.org/@langchain/core/-/core-0.1.52.tgz#7619310b83ffa841628efe2e1eda873ca714d068" + resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.1.52.tgz#7619310b83ffa841628efe2e1eda873ca714d068" integrity sha512-AEyP99r7jijF33pyzaWtqCkiO9crotgethqq7jznAGlIojMCL9BT/id2DjVyN32SGFTpet273kkjsmEdFSHqpA== dependencies: ansi-styles "^5.0.0" @@ -417,7 +417,7 @@ "@langchain/openai@^0.0.25", "@langchain/openai@~0.0.19": version "0.0.25" - resolved "https://registry.npmjs.org/@langchain/openai/-/openai-0.0.25.tgz#8332abea1e3acb9b1169f90636e518c0ee90622e" + resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.0.25.tgz#8332abea1e3acb9b1169f90636e518c0ee90622e" integrity sha512-cD9xPDDXK2Cjs6yYg27BpdzBnQZvBb1yaNgMoGLWIT27UQVRyT96PLC1OVMQOmMmHaKDBCj/1bW4GQQgX7+d2Q== dependencies: "@langchain/core" "~0.1.45" @@ -428,7 +428,7 @@ "@langchain/openai@~0.0.28": version "0.0.34" - resolved "https://registry.npmjs.org/@langchain/openai/-/openai-0.0.34.tgz#36c9bca0721ab9f7e5d40927e7c0429cacbd5b56" + resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.0.34.tgz#36c9bca0721ab9f7e5d40927e7c0429cacbd5b56" integrity sha512-M+CW4oXle5fdoz2T2SwdOef8pl3/1XmUx1vjn2mXUVM/128aO0l23FMF0SNBsAbRV6P+p/TuzjodchJbi0Ht/A== dependencies: "@langchain/core" ">0.1.56 <0.3.0" @@ -439,7 +439,7 @@ "@langchain/openai@~0.1.0": version "0.1.3" - resolved "https://registry.npmjs.org/@langchain/openai/-/openai-0.1.3.tgz#6eb0994e970d85ffa9aaeafb94449024ccf6ca63" + resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.1.3.tgz#6eb0994e970d85ffa9aaeafb94449024ccf6ca63" integrity sha512-riv/JC9x2A8b7GcHu8sx+mlZJ8KAwSSi231IPTlcciYnKozmrQ5H0vrtiD31fxiDbaRsk7tyCpkSBIOQEo7CyQ== dependencies: "@langchain/core" ">=0.2.5 <0.3.0" @@ -450,7 +450,7 @@ "@langchain/textsplitters@~0.0.0": version "0.0.3" - resolved "https://registry.npmjs.org/@langchain/textsplitters/-/textsplitters-0.0.3.tgz#1a3cc93dd2ab330edb225400ded190a22fea14e3" + resolved "https://registry.yarnpkg.com/@langchain/textsplitters/-/textsplitters-0.0.3.tgz#1a3cc93dd2ab330edb225400ded190a22fea14e3" integrity sha512-cXWgKE3sdWLSqAa8ykbCcUsUF1Kyr5J3HOWYGuobhPEycXW4WI++d5DhzdpL238mzoEXTi90VqfSCra37l5YqA== dependencies: "@langchain/core" ">0.2.0 <0.3.0" @@ -458,27 +458,27 @@ "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" - resolved "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== "@protobufjs/base64@^1.1.2": version "1.1.2" - resolved "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== "@protobufjs/codegen@^2.0.4": version "2.0.4" - resolved "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== "@protobufjs/eventemitter@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== "@protobufjs/fetch@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== dependencies: "@protobufjs/aspromise" "^1.1.1" @@ -486,32 +486,32 @@ "@protobufjs/float@^1.0.2": version "1.0.2" - resolved "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== "@protobufjs/inquire@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== "@protobufjs/path@^1.1.2": version "1.1.2" - resolved "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== "@protobufjs/pool@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== "@protobufjs/utf8@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== "@selderee/plugin-htmlparser2@^0.11.0": version "0.11.0" - resolved "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz#d5b5e29a7ba6d3958a1972c7be16f4b2c188c517" + resolved "https://registry.yarnpkg.com/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz#d5b5e29a7ba6d3958a1972c7be16f4b2c188c517" integrity sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ== dependencies: domhandler "^5.0.3" @@ -519,34 +519,34 @@ "@tsconfig/node10@^1.0.7": version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.4" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@types/better-sqlite3@^7.6.10": version "7.6.10" - resolved "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.10.tgz#1818e56490953404acfd44cdde0464f201be6105" + resolved "https://registry.yarnpkg.com/@types/better-sqlite3/-/better-sqlite3-7.6.10.tgz#1818e56490953404acfd44cdde0464f201be6105" integrity sha512-TZBjD+yOsyrUJGmcUj6OS3JADk3+UZcNv3NOBqGkM09bZdi28fNZw8ODqbMOLfKCu7RYCO62/ldq1iHbzxqoPw== dependencies: "@types/node" "*" "@types/body-parser@*": version "1.19.5" - resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== dependencies: "@types/connect" "*" @@ -554,21 +554,21 @@ "@types/connect@*": version "3.4.38" - resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" "@types/cors@^2.8.17": version "2.8.17" - resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== dependencies: "@types/node" "*" "@types/express-serve-static-core@^4.17.33": version "4.17.43" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54" integrity sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg== dependencies: "@types/node" "*" @@ -578,7 +578,7 @@ "@types/express@^4.17.21": version "4.17.21" - resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== dependencies: "@types/body-parser" "*" @@ -588,27 +588,27 @@ "@types/html-to-text@^9.0.4": version "9.0.4" - resolved "https://registry.npmjs.org/@types/html-to-text/-/html-to-text-9.0.4.tgz#4a83dd8ae8bfa91457d0b1ffc26f4d0537eff58c" + resolved "https://registry.yarnpkg.com/@types/html-to-text/-/html-to-text-9.0.4.tgz#4a83dd8ae8bfa91457d0b1ffc26f4d0537eff58c" integrity sha512-pUY3cKH/Nm2yYrEmDlPR1mR7yszjGx4DrwPjQ702C4/D5CwHuZTgZdIdwPkRbcuhs7BAh2L5rg3CL5cbRiGTCQ== "@types/http-errors@*": version "2.0.4" - resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== "@types/long@^4.0.1": version "4.0.2" - resolved "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== "@types/mime@^1": version "1.3.5" - resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/node-fetch@^2.6.4": version "2.6.11" - resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== dependencies: "@types/node" "*" @@ -616,43 +616,43 @@ "@types/node@*": version "20.12.2" - resolved "https://registry.npmjs.org/@types/node/-/node-20.12.2.tgz#9facdd11102f38b21b4ebedd9d7999663343d72e" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.2.tgz#9facdd11102f38b21b4ebedd9d7999663343d72e" integrity sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ== dependencies: undici-types "~5.26.4" "@types/node@>=13.7.0": version "20.12.9" - resolved "https://registry.npmjs.org/@types/node/-/node-20.12.9.tgz#d7234f2e7839b55fcab5048404aef0195684adff" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.9.tgz#d7234f2e7839b55fcab5048404aef0195684adff" integrity sha512-o93r47yu04MHumPBCFg0bMPBMNgtMg3jzbhl7e68z50+BMHmRMGDJv13eBlUgOdc9i/uoJXGMGYLtJV4ReTXEg== dependencies: undici-types "~5.26.4" "@types/node@^18.11.18": version "18.19.28" - resolved "https://registry.npmjs.org/@types/node/-/node-18.19.28.tgz#c64a2c992c8ebbf61100a4570e4eebc1934ae030" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.28.tgz#c64a2c992c8ebbf61100a4570e4eebc1934ae030" integrity sha512-J5cOGD9n4x3YGgVuaND6khm5x07MMdAKkRyXnjVR6KFhLMNh2yONGiP7Z+4+tBOt5mK+GvDTiacTOVGGpqiecw== dependencies: undici-types "~5.26.4" "@types/pdf-parse@^1.1.4": version "1.1.4" - resolved "https://registry.npmjs.org/@types/pdf-parse/-/pdf-parse-1.1.4.tgz#21a539efd2f16009d08aeed3350133948b5d7ed1" + resolved "https://registry.yarnpkg.com/@types/pdf-parse/-/pdf-parse-1.1.4.tgz#21a539efd2f16009d08aeed3350133948b5d7ed1" integrity sha512-+gbBHbNCVGGYw1S9lAIIvrHW47UYOhMIFUsJcMkMrzy1Jf0vulBN3XQIjPgnoOXveMuHnF3b57fXROnY/Or7eg== "@types/qs@*": version "6.9.14" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz#169e142bfe493895287bee382af6039795e9b75b" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.14.tgz#169e142bfe493895287bee382af6039795e9b75b" integrity sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA== "@types/range-parser@*": version "1.2.7" - resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/readable-stream@^4.0.11": version "4.0.11" - resolved "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.11.tgz#684f1e947c90cb6a8ad3904523d650bb66cdbb84" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-4.0.11.tgz#684f1e947c90cb6a8ad3904523d650bb66cdbb84" integrity sha512-R3eUMUTTKoIoaz7UpYLxvZCrOmCRPRbAmoDDHKcimTEySltaJhF8hLzj4+EzyDifiX5eK6oDQGSfmNnXjxZzYQ== dependencies: "@types/node" "*" @@ -660,12 +660,12 @@ "@types/retry@0.12.0": version "0.12.0" - resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== "@types/send@*": version "0.17.4" - resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== dependencies: "@types/mime" "^1" @@ -673,7 +673,7 @@ "@types/serve-static@*": version "1.15.7" - resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== dependencies: "@types/http-errors" "*" @@ -682,24 +682,24 @@ "@types/triple-beam@^1.3.2": version "1.3.5" - resolved "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" + resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== "@types/uuid@^9.0.1": version "9.0.8" - resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== "@types/ws@^8.5.12": version "8.5.12" - resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.12.tgz#619475fe98f35ccca2a2f6c137702d85ec247b7e" integrity sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ== dependencies: "@types/node" "*" "@xenova/transformers@^2.17.1": version "2.17.1" - resolved "https://registry.npmjs.org/@xenova/transformers/-/transformers-2.17.1.tgz#712f7a72c76c8aa2075749382f83dc7dd4e5a9a5" + resolved "https://registry.yarnpkg.com/@xenova/transformers/-/transformers-2.17.1.tgz#712f7a72c76c8aa2075749382f83dc7dd4e5a9a5" integrity sha512-zo702tQAFZXhzeD2GCYUNUqeqkoueOdiSbQWa4s0q7ZE4z8WBIwIsMMPGobpgdqjQ2u0Qulo08wuqVEUrBXjkQ== dependencies: "@huggingface/jinja" "^0.2.2" @@ -710,19 +710,19 @@ abbrev@1: version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== abort-controller@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: event-target-shim "^5.0.0" accepts@~1.3.8: version "1.3.8" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" @@ -730,29 +730,29 @@ accepts@~1.3.8: acorn-walk@^8.1.1: version "8.3.2" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== acorn@^8.4.1: version "8.11.3" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== agentkeepalive@^4.2.1: version "4.5.0" - resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== dependencies: humanize-ms "^1.2.1" ansi-styles@^5.0.0: version "5.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -760,32 +760,32 @@ anymatch@~3.1.2: arg@^4.1.0: version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-flatten@1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== async@^3.2.3: version "3.2.5" - resolved "https://registry.npmjs.org/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== axios@^1.6.8: version "1.6.8" - resolved "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== dependencies: follow-redirects "^1.15.6" @@ -794,22 +794,22 @@ axios@^1.6.8: b4a@^1.6.4: version "1.6.6" - resolved "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz#a4cc349a3851987c3c4ac2d7785c18744f6da9ba" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.6.tgz#a4cc349a3851987c3c4ac2d7785c18744f6da9ba" integrity sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg== balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== bare-events@^2.0.0, bare-events@^2.2.0: version "2.2.2" - resolved "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz#a98a41841f98b2efe7ecc5c5468814469b018078" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.2.2.tgz#a98a41841f98b2efe7ecc5c5468814469b018078" integrity sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ== bare-fs@^2.1.1: version "2.3.0" - resolved "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.0.tgz#0872f8e33cf291c9fd527d827154f156a298d402" + resolved "https://registry.yarnpkg.com/bare-fs/-/bare-fs-2.3.0.tgz#0872f8e33cf291c9fd527d827154f156a298d402" integrity sha512-TNFqa1B4N99pds2a5NYHR15o0ZpdNKbAeKTE/+G6ED/UeOavv8RY3dr/Fu99HW3zU3pXpo2kDNO8Sjsm2esfOw== dependencies: bare-events "^2.0.0" @@ -818,36 +818,36 @@ bare-fs@^2.1.1: bare-os@^2.1.0: version "2.3.0" - resolved "https://registry.npmjs.org/bare-os/-/bare-os-2.3.0.tgz#718e680b139effff0624a7421c098e7a2c2d63da" + resolved "https://registry.yarnpkg.com/bare-os/-/bare-os-2.3.0.tgz#718e680b139effff0624a7421c098e7a2c2d63da" integrity sha512-oPb8oMM1xZbhRQBngTgpcQ5gXw6kjOaRsSWsIeNyRxGed2w/ARyP7ScBYpWR1qfX2E5rS3gBw6OWcSQo+s+kUg== bare-path@^2.0.0, bare-path@^2.1.0: version "2.1.2" - resolved "https://registry.npmjs.org/bare-path/-/bare-path-2.1.2.tgz#7a0940d34ebe65f7e179fa61ed8d49d9dc151d67" + resolved "https://registry.yarnpkg.com/bare-path/-/bare-path-2.1.2.tgz#7a0940d34ebe65f7e179fa61ed8d49d9dc151d67" integrity sha512-o7KSt4prEphWUHa3QUwCxUI00R86VdjiuxmJK0iNVDHYPGo+HsDaVCnqCmPbf/MiW1ok8F4p3m8RTHlWk8K2ig== dependencies: bare-os "^2.1.0" bare-stream@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/bare-stream/-/bare-stream-1.0.0.tgz#25c3e56198d922187320c3f8c52d75c4051178b4" + resolved "https://registry.yarnpkg.com/bare-stream/-/bare-stream-1.0.0.tgz#25c3e56198d922187320c3f8c52d75c4051178b4" integrity sha512-KhNUoDL40iP4gFaLSsoGE479t0jHijfYdIcxRn/XtezA2BaUD0NRf/JGRpsMq6dMNM+SrCrB0YSSo/5wBY4rOQ== dependencies: streamx "^2.16.1" base-64@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" + resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA== base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== better-sqlite3@^11.0.0: version "11.0.0" - resolved "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.0.0.tgz#12083acfe0ded6abdba908ed73520f2003e3ea0e" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-11.0.0.tgz#12083acfe0ded6abdba908ed73520f2003e3ea0e" integrity sha512-1NnNhmT3EZTsKtofJlMox1jkMxdedILury74PwUbQBjWgo4tL4kf7uTAjU55mgQwjdzqakSTjkf+E1imrFwjnA== dependencies: bindings "^1.5.0" @@ -855,24 +855,24 @@ better-sqlite3@^11.0.0: binary-extensions@^2.0.0, binary-extensions@^2.2.0: version "2.3.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== binary-search@^1.3.5: version "1.3.6" - resolved "https://registry.npmjs.org/binary-search/-/binary-search-1.3.6.tgz#e32426016a0c5092f0f3598836a1c7da3560565c" + resolved "https://registry.yarnpkg.com/binary-search/-/binary-search-1.3.6.tgz#e32426016a0c5092f0f3598836a1c7da3560565c" integrity sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA== bindings@^1.5.0: version "1.5.0" - resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: file-uri-to-path "1.0.0" bl@^4.0.3: version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -881,7 +881,7 @@ bl@^4.0.3: body-parser@1.20.2: version "1.20.2" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== dependencies: bytes "3.1.2" @@ -899,7 +899,7 @@ body-parser@1.20.2: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -907,19 +907,19 @@ brace-expansion@^1.1.7: braces@~3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer@^5.5.0: version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -927,12 +927,12 @@ buffer@^5.5.0: bytes@3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== call-bind@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: es-define-property "^1.0.0" @@ -943,17 +943,17 @@ call-bind@^1.0.7: camelcase@6: version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== charenc@0.0.2: version "0.0.2" - resolved "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== chokidar@^3.5.2: version "3.6.0" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" @@ -968,36 +968,36 @@ chokidar@^3.5.2: chownr@^1.1.1: version "1.1.4" - resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== color-convert@^1.9.3: version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== color-string@^1.6.0, color-string@^1.9.0: version "1.9.1" - resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== dependencies: color-name "^1.0.0" @@ -1005,7 +1005,7 @@ color-string@^1.6.0, color-string@^1.9.0: color@^3.1.3: version "3.2.1" - resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== dependencies: color-convert "^1.9.3" @@ -1013,7 +1013,7 @@ color@^3.1.3: color@^4.2.3: version "4.2.3" - resolved "https://registry.npmjs.org/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== dependencies: color-convert "^2.0.1" @@ -1021,7 +1021,7 @@ color@^4.2.3: colorspace@1.1.x: version "1.1.4" - resolved "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== dependencies: color "^3.1.3" @@ -1029,19 +1029,19 @@ colorspace@1.1.x: combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@^10.0.1: version "10.0.1" - resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== compute-cosine-similarity@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/compute-cosine-similarity/-/compute-cosine-similarity-1.1.0.tgz#0086a06b0239deb90f231f0da894efdc48884609" + resolved "https://registry.yarnpkg.com/compute-cosine-similarity/-/compute-cosine-similarity-1.1.0.tgz#0086a06b0239deb90f231f0da894efdc48884609" integrity sha512-FXhNx0ILLjGi9Z9+lglLzM12+0uoTnYkHm7GiadXDAr0HGVLm25OivUS1B/LPkbzzvlcXz/1EvWg9ZYyJSdhTw== dependencies: compute-dot "^1.1.0" @@ -1051,7 +1051,7 @@ compute-cosine-similarity@^1.1.0: compute-dot@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/compute-dot/-/compute-dot-1.1.0.tgz#01a5ba2c7af73b99002acb258459c9576a8232dc" + resolved "https://registry.yarnpkg.com/compute-dot/-/compute-dot-1.1.0.tgz#01a5ba2c7af73b99002acb258459c9576a8232dc" integrity sha512-L5Ocet4DdMrXboss13K59OK23GXjiSia7+7Ukc7q4Bl+RVpIXK2W9IHMbWDZkh+JUEvJAwOKRaJDiFUa1LTnJg== dependencies: validate.io-array "^1.0.3" @@ -1059,7 +1059,7 @@ compute-dot@^1.1.0: compute-l2norm@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/compute-l2norm/-/compute-l2norm-1.1.0.tgz#bd09131c6b36c8d70c68334e176009a4e0a989ac" + resolved "https://registry.yarnpkg.com/compute-l2norm/-/compute-l2norm-1.1.0.tgz#bd09131c6b36c8d70c68334e176009a4e0a989ac" integrity sha512-6EHh1Elj90eU28SXi+h2PLnTQvZmkkHWySpoFz+WOlVNLz3DQoC4ISUHSV9n5jMxPHtKGJ01F4uu2PsXBB8sSg== dependencies: validate.io-array "^1.0.3" @@ -1067,34 +1067,34 @@ compute-l2norm@^1.1.0: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== content-disposition@0.5.4: version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== cookie-signature@1.0.6: version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== cookie@0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== cors@^2.8.5: version "2.8.5" - resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== dependencies: object-assign "^4" @@ -1102,67 +1102,67 @@ cors@^2.8.5: create-require@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== crypt@0.0.2: version "0.0.2" - resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== debug@2.6.9: version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@^3.1.0: version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" debug@^4: version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" debug@^4.3.4: version "4.3.5" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== dependencies: ms "2.1.2" decamelize@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" deep-extend@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deepmerge@^4.3.1: version "4.3.1" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== define-data-property@^1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: es-define-property "^1.0.0" @@ -1171,32 +1171,32 @@ define-data-property@^1.1.4: delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== depd@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== destroy@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-libc@^2.0.0, detect-libc@^2.0.2: version "2.0.3" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== diff@^4.0.1: version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== digest-fetch@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.3.0.tgz#898e69264d00012a23cf26e8a3e40320143fc661" + resolved "https://registry.yarnpkg.com/digest-fetch/-/digest-fetch-1.3.0.tgz#898e69264d00012a23cf26e8a3e40320143fc661" integrity sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA== dependencies: base-64 "^0.1.0" @@ -1204,7 +1204,7 @@ digest-fetch@^1.3.0: dom-serializer@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== dependencies: domelementtype "^2.3.0" @@ -1213,19 +1213,19 @@ dom-serializer@^2.0.0: domelementtype@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== dependencies: domelementtype "^2.3.0" domutils@^3.0.1: version "3.1.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== dependencies: dom-serializer "^2.0.0" @@ -1234,12 +1234,12 @@ domutils@^3.0.1: dotenv@^16.4.5: version "16.4.5" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== drizzle-kit@^0.22.7: version "0.22.7" - resolved "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.22.7.tgz#4339c3e24c6555ea8cbad605f005b3db3e604a9c" + resolved "https://registry.yarnpkg.com/drizzle-kit/-/drizzle-kit-0.22.7.tgz#4339c3e24c6555ea8cbad605f005b3db3e604a9c" integrity sha512-9THPCb2l1GPt7wxhws9LvTR0YG565ZlVgTuqGMwjs590Kch1pXu4GyjEArVijSF5m0OBj3qgdeKmuJXhKXgWFw== dependencies: "@esbuild-kit/esm-loader" "^2.5.5" @@ -1248,58 +1248,58 @@ drizzle-kit@^0.22.7: drizzle-orm@^0.31.2: version "0.31.2" - resolved "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.31.2.tgz#221a257dd487bab49ddb88a17bd82388600cf655" + resolved "https://registry.yarnpkg.com/drizzle-orm/-/drizzle-orm-0.31.2.tgz#221a257dd487bab49ddb88a17bd82388600cf655" integrity sha512-QnenevbnnAzmbNzQwbhklvIYrDE8YER8K7kSrAWQSV1YvFCdSQPzj+jzqRdTSsV2cDqSpQ0NXGyL1G9I43LDLg== ee-first@1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== enabled@2.0.x: version "2.0.0" - resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" entities@^4.2.0, entities@^4.4.0: version "4.5.0" - resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== es-define-property@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== dependencies: get-intrinsic "^1.2.4" es-errors@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== esbuild-register@^3.5.0: version "3.5.0" - resolved "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz#449613fb29ab94325c722f560f800dd946dc8ea8" + resolved "https://registry.yarnpkg.com/esbuild-register/-/esbuild-register-3.5.0.tgz#449613fb29ab94325c722f560f800dd946dc8ea8" integrity sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A== dependencies: debug "^4.3.4" esbuild@^0.19.7: version "0.19.12" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== optionalDependencies: "@esbuild/aix-ppc64" "0.19.12" @@ -1328,7 +1328,7 @@ esbuild@^0.19.7: esbuild@~0.18.20: version "0.18.20" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== optionalDependencies: "@esbuild/android-arm" "0.18.20" @@ -1356,37 +1356,37 @@ esbuild@~0.18.20: escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== etag@~1.8.1: version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== event-target-shim@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== eventemitter3@^4.0.4: version "4.0.7" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== expand-template@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== expr-eval@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/expr-eval/-/expr-eval-2.0.2.tgz#fa6f044a7b0c93fde830954eb9c5b0f7fbc7e201" + resolved "https://registry.yarnpkg.com/expr-eval/-/expr-eval-2.0.2.tgz#fa6f044a7b0c93fde830954eb9c5b0f7fbc7e201" integrity sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg== express@^4.19.2: version "4.19.2" - resolved "https://registry.npmjs.org/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" + resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== dependencies: accepts "~1.3.8" @@ -1423,36 +1423,36 @@ express@^4.19.2: fast-fifo@^1.1.0, fast-fifo@^1.2.0: version "1.3.2" - resolved "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== fast-xml-parser@^4.3.5: version "4.4.0" - resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz#341cc98de71e9ba9e651a67f41f1752d1441a501" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz#341cc98de71e9ba9e651a67f41f1752d1441a501" integrity sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg== dependencies: strnum "^1.0.5" fecha@^4.2.0: version "4.2.3" - resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== file-uri-to-path@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" finalhandler@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: debug "2.6.9" @@ -1465,32 +1465,32 @@ finalhandler@1.2.0: flat@^5.0.2: version "5.0.2" - resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatbuffers@^1.12.0: version "1.12.0" - resolved "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz#72e87d1726cb1b216e839ef02658aa87dcef68aa" + resolved "https://registry.yarnpkg.com/flatbuffers/-/flatbuffers-1.12.0.tgz#72e87d1726cb1b216e839ef02658aa87dcef68aa" integrity sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ== fn.name@1.x.x: version "1.1.0" - resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== follow-redirects@^1.15.6: version "1.15.6" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== form-data-encoder@1.7.2: version "1.7.2" - resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040" integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A== form-data@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" @@ -1499,7 +1499,7 @@ form-data@^4.0.0: formdata-node@^4.3.2: version "4.4.1" - resolved "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2" + resolved "https://registry.yarnpkg.com/formdata-node/-/formdata-node-4.4.1.tgz#23f6a5cb9cb55315912cbec4ff7b0f59bbd191e2" integrity sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ== dependencies: node-domexception "1.0.0" @@ -1507,32 +1507,32 @@ formdata-node@^4.3.2: forwarded@0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fresh@0.5.2: version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-constants@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== fsevents@~2.3.2: version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: version "1.2.4" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: es-errors "^1.3.0" @@ -1543,67 +1543,67 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: get-tsconfig@^4.7.0: version "4.7.5" - resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz#5e012498579e9a6947511ed0cd403272c7acbbaf" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.5.tgz#5e012498579e9a6947511ed0cd403272c7acbbaf" integrity sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw== dependencies: resolve-pkg-maps "^1.0.0" github-from-package@0.0.0: version "0.0.0" - resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" gopd@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" guid-typescript@^1.0.9: version "1.0.9" - resolved "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz#e35f77003535b0297ea08548f5ace6adb1480ddc" + resolved "https://registry.yarnpkg.com/guid-typescript/-/guid-typescript-1.0.9.tgz#e35f77003535b0297ea08548f5ace6adb1480ddc" integrity sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-property-descriptors@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: es-define-property "^1.0.0" has-proto@^1.0.1: version "1.0.3" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== hasown@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" html-to-text@^9.0.5: version "9.0.5" - resolved "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz#6149a0f618ae7a0db8085dca9bbf96d32bb8368d" + resolved "https://registry.yarnpkg.com/html-to-text/-/html-to-text-9.0.5.tgz#6149a0f618ae7a0db8085dca9bbf96d32bb8368d" integrity sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg== dependencies: "@selderee/plugin-htmlparser2" "^0.11.0" @@ -1614,7 +1614,7 @@ html-to-text@^9.0.5: htmlparser2@^8.0.2: version "8.0.2" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== dependencies: domelementtype "^2.3.0" @@ -1624,7 +1624,7 @@ htmlparser2@^8.0.2: http-errors@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -1635,121 +1635,121 @@ http-errors@2.0.0: humanize-ms@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" iconv-lite@0.4.24: version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" ieee754@^1.1.13: version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore-by-default@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@~1.3.0: version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-any-array@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/is-any-array/-/is-any-array-2.0.1.tgz#9233242a9c098220290aa2ec28f82ca7fa79899e" + resolved "https://registry.yarnpkg.com/is-any-array/-/is-any-array-2.0.1.tgz#9233242a9c098220290aa2ec28f82ca7fa79899e" integrity sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ== is-arrayish@^0.3.1: version "0.3.2" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-buffer@~1.1.6: version "1.1.6" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== js-tiktoken@^1.0.12: version "1.0.12" - resolved "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.12.tgz#af0f5cf58e5e7318240d050c8413234019424211" + resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.12.tgz#af0f5cf58e5e7318240d050c8413234019424211" integrity sha512-L7wURW1fH9Qaext0VzaUDpFGVQgjkdE3Dgsy9/+yXyGEpBKnylTd0mU0bfbNkKDlXRb6TEsZkwuflu1B8uQbJQ== dependencies: base64-js "^1.5.1" js-tiktoken@^1.0.7, js-tiktoken@^1.0.8: version "1.0.10" - resolved "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.10.tgz#2b343ec169399dcee8f9ef9807dbd4fafd3b30dc" + resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.10.tgz#2b343ec169399dcee8f9ef9807dbd4fafd3b30dc" integrity sha512-ZoSxbGjvGyMT13x6ACo9ebhDha/0FHdKA+OsQcMOWcm1Zs7r90Rhk5lhERLzji+3rA7EKpXCgwXcM5fF3DMpdA== dependencies: base64-js "^1.5.1" js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsonpointer@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== kuler@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== langchain@0.2.3: version "0.2.3" - resolved "https://registry.npmjs.org/langchain/-/langchain-0.2.3.tgz#c14bb05cf871b21bd63b84b3ab89580b1d62539f" + resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.2.3.tgz#c14bb05cf871b21bd63b84b3ab89580b1d62539f" integrity sha512-T9xR7zd+Nj0oXy6WoYKmZLy0DlQiDLFPGYWdOXDxy+AvqlujoPdVQgDSpdqiOHvAjezrByAoKxoHCz5XMwTP/Q== dependencies: "@langchain/core" "~0.2.0" @@ -1771,7 +1771,7 @@ langchain@0.2.3: langchain@^0.1.30: version "0.1.30" - resolved "https://registry.npmjs.org/langchain/-/langchain-0.1.30.tgz#e1adb3f1849fcd5c596c668300afd5dc8cb37a97" + resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.1.30.tgz#e1adb3f1849fcd5c596c668300afd5dc8cb37a97" integrity sha512-5h/vNMmutQ98tbB0sPDlAileZVca6A2McFgGa3+D56Dm8mSSCzTQL2DngPA6h09DlKDpSr7+6PdFw5Hoj0ZDSw== dependencies: "@anthropic-ai/sdk" "^0.9.1" @@ -1794,12 +1794,12 @@ langchain@^0.1.30: langchainhub@~0.0.8: version "0.0.8" - resolved "https://registry.npmjs.org/langchainhub/-/langchainhub-0.0.8.tgz#fd4b96dc795e22e36c1a20bad31b61b0c33d3110" + resolved "https://registry.yarnpkg.com/langchainhub/-/langchainhub-0.0.8.tgz#fd4b96dc795e22e36c1a20bad31b61b0c33d3110" integrity sha512-Woyb8YDHgqqTOZvWIbm2CaFDGfZ4NTSyXV687AG4vXEfoNo7cGQp7nhl7wL3ehenKWmNEmcxCLgOZzW8jE6lOQ== langsmith@~0.1.1, langsmith@~0.1.7: version "0.1.14" - resolved "https://registry.npmjs.org/langsmith/-/langsmith-0.1.14.tgz#2b889dbcfb49547614df276a4a5a063092a1585d" + resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.1.14.tgz#2b889dbcfb49547614df276a4a5a063092a1585d" integrity sha512-iEzQLLB7/0nRpAwNBAR7B7N64fyByg5UsNjSvLaCCkQ9AS68PSafjB8xQkyI8QXXrGjU1dEqDRoa8m4SUuRdUw== dependencies: "@types/uuid" "^9.0.1" @@ -1810,7 +1810,7 @@ langsmith@~0.1.1, langsmith@~0.1.7: langsmith@~0.1.30: version "0.1.34" - resolved "https://registry.npmjs.org/langsmith/-/langsmith-0.1.34.tgz#801310495fef258ed9c22bb5575120e2c06d51cf" + resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.1.34.tgz#801310495fef258ed9c22bb5575120e2c06d51cf" integrity sha512-aMv2k8kEaovhTuZnK6/6DMCoM7Jurvm1AzdESn+yN+HramRxp3sK32jFRz3ogkXP6GjAjOIofcnNkzhHXSUXGA== dependencies: "@types/uuid" "^9.0.1" @@ -1822,17 +1822,17 @@ langsmith@~0.1.30: leac@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz#dcf136e382e666bd2475f44a1096061b70dc0912" + resolved "https://registry.yarnpkg.com/leac/-/leac-0.6.0.tgz#dcf136e382e666bd2475f44a1096061b70dc0912" integrity sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg== lodash.set@^4.3.2: version "4.3.2" - resolved "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" integrity sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg== logform@^2.3.2, logform@^2.4.0: version "2.6.0" - resolved "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5" integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ== dependencies: "@colors/colors" "1.6.0" @@ -1844,24 +1844,24 @@ logform@^2.3.2, logform@^2.4.0: long@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" make-error@^1.1.1: version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== md5@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" + resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== dependencies: charenc "0.0.2" @@ -1870,80 +1870,80 @@ md5@^2.3.0: media-typer@0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== merge-descriptors@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== methods@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== mime-db@1.52.0: version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime@1.6.0: version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mimic-response@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimist@^1.2.0, minimist@^1.2.3: version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" - resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== ml-array-mean@^1.1.6: version "1.1.6" - resolved "https://registry.npmjs.org/ml-array-mean/-/ml-array-mean-1.1.6.tgz#d951a700dc8e3a17b3e0a583c2c64abd0c619c56" + resolved "https://registry.yarnpkg.com/ml-array-mean/-/ml-array-mean-1.1.6.tgz#d951a700dc8e3a17b3e0a583c2c64abd0c619c56" integrity sha512-MIdf7Zc8HznwIisyiJGRH9tRigg3Yf4FldW8DxKxpCCv/g5CafTw0RRu51nojVEOXuCQC7DRVVu5c7XXO/5joQ== dependencies: ml-array-sum "^1.1.6" ml-array-sum@^1.1.6: version "1.1.6" - resolved "https://registry.npmjs.org/ml-array-sum/-/ml-array-sum-1.1.6.tgz#d1d89c20793cd29c37b09d40e85681aa4515a955" + resolved "https://registry.yarnpkg.com/ml-array-sum/-/ml-array-sum-1.1.6.tgz#d1d89c20793cd29c37b09d40e85681aa4515a955" integrity sha512-29mAh2GwH7ZmiRnup4UyibQZB9+ZLyMShvt4cH4eTK+cL2oEMIZFnSyB3SS8MlsTh6q/w/yh48KmqLxmovN4Dw== dependencies: is-any-array "^2.0.0" ml-distance-euclidean@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ml-distance-euclidean/-/ml-distance-euclidean-2.0.0.tgz#3a668d236649d1b8fec96380b9435c6f42c9a817" + resolved "https://registry.yarnpkg.com/ml-distance-euclidean/-/ml-distance-euclidean-2.0.0.tgz#3a668d236649d1b8fec96380b9435c6f42c9a817" integrity sha512-yC9/2o8QF0A3m/0IXqCTXCzz2pNEzvmcE/9HFKOZGnTjatvBbsn4lWYJkxENkA4Ug2fnYl7PXQxnPi21sgMy/Q== ml-distance@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/ml-distance/-/ml-distance-4.0.1.tgz#4741d17a1735888c5388823762271dfe604bd019" + resolved "https://registry.yarnpkg.com/ml-distance/-/ml-distance-4.0.1.tgz#4741d17a1735888c5388823762271dfe604bd019" integrity sha512-feZ5ziXs01zhyFUUUeZV5hwc0f5JW0Sh0ckU1koZe/wdVkJdGxcP06KNQuF0WBTj8FttQUzcvQcpcrOp/XrlEw== dependencies: ml-array-mean "^1.1.6" @@ -1952,7 +1952,7 @@ ml-distance@^4.0.0: ml-tree-similarity@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/ml-tree-similarity/-/ml-tree-similarity-1.0.0.tgz#24705a107e32829e24d945e87219e892159c53f0" + resolved "https://registry.yarnpkg.com/ml-tree-similarity/-/ml-tree-similarity-1.0.0.tgz#24705a107e32829e24d945e87219e892159c53f0" integrity sha512-XJUyYqjSuUQkNQHMscr6tcjldsOoAekxADTplt40QKfwW6nd++1wHWV9AArl0Zvw/TIHgNaZZNvr8QGvE8wLRg== dependencies: binary-search "^1.3.5" @@ -1960,66 +1960,66 @@ ml-tree-similarity@^1.0.0: ms@2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@2.1.3, ms@^2.0.0, ms@^2.1.1: version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mustache@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== napi-build-utils@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== negotiator@0.6.3: version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== node-abi@^3.3.0: version "3.62.0" - resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.62.0.tgz#017958ed120f89a3a14a7253da810f5d724e3f36" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.62.0.tgz#017958ed120f89a3a14a7253da810f5d724e3f36" integrity sha512-CPMcGa+y33xuL1E0TcNIu4YyaZCxnnvkVaEXrsosR3FxN+fV8xvb7Mzpb7IgKler10qeMkE6+Dp8qJhpzdq35g== dependencies: semver "^7.3.5" node-addon-api@^6.1.0: version "6.1.0" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== node-domexception@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== node-ensure@^0.0.0: version "0.0.0" - resolved "https://registry.npmjs.org/node-ensure/-/node-ensure-0.0.0.tgz#ecae764150de99861ec5c810fd5d096b183932a7" + resolved "https://registry.yarnpkg.com/node-ensure/-/node-ensure-0.0.0.tgz#ecae764150de99861ec5c810fd5d096b183932a7" integrity sha512-DRI60hzo2oKN1ma0ckc6nQWlHU69RH6xN0sjQTjMpChPfTYvKZdcQFfdYK2RWbJcKyUizSIy/l8OTGxMAM1QDw== node-fetch@^2.6.7: version "2.7.0" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" nodemon@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz#ff7394f2450eb6a5e96fe4180acd5176b29799c9" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.0.tgz#ff7394f2450eb6a5e96fe4180acd5176b29799c9" integrity sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA== dependencies: chokidar "^3.5.2" @@ -2035,74 +2035,74 @@ nodemon@^3.1.0: nopt@~1.0.10: version "1.0.10" - resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== dependencies: abbrev "1" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== num-sort@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/num-sort/-/num-sort-2.1.0.tgz#1cbb37aed071329fdf41151258bc011898577a9b" + resolved "https://registry.yarnpkg.com/num-sort/-/num-sort-2.1.0.tgz#1cbb37aed071329fdf41151258bc011898577a9b" integrity sha512-1MQz1Ed8z2yckoBeSfkQHHO9K1yDRxxtotKSJ9yvcTUUxSvfvzEq5GwBrjjHEpMlq/k5gvXdmJ1SbYxWtpNoVg== object-assign@^4: version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.13.1: version "1.13.1" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== on-finished@2.4.1: version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" one-time@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== dependencies: fn.name "1.x.x" onnx-proto@^4.0.4: version "4.0.4" - resolved "https://registry.npmjs.org/onnx-proto/-/onnx-proto-4.0.4.tgz#2431a25bee25148e915906dda0687aafe3b9e044" + resolved "https://registry.yarnpkg.com/onnx-proto/-/onnx-proto-4.0.4.tgz#2431a25bee25148e915906dda0687aafe3b9e044" integrity sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA== dependencies: protobufjs "^6.8.8" onnxruntime-common@~1.14.0: version "1.14.0" - resolved "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.14.0.tgz#2bb5dac5261269779aa5fb6536ca379657de8bf6" + resolved "https://registry.yarnpkg.com/onnxruntime-common/-/onnxruntime-common-1.14.0.tgz#2bb5dac5261269779aa5fb6536ca379657de8bf6" integrity sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew== onnxruntime-node@1.14.0: version "1.14.0" - resolved "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.14.0.tgz#c4ae6c355cfae7d83abaf36dd39a905c4a010217" + resolved "https://registry.yarnpkg.com/onnxruntime-node/-/onnxruntime-node-1.14.0.tgz#c4ae6c355cfae7d83abaf36dd39a905c4a010217" integrity sha512-5ba7TWomIV/9b6NH/1x/8QEeowsb+jBEvFzU6z0T4mNsFwdPqXeFUM7uxC6QeSRkEbWu3qEB0VMjrvzN/0S9+w== dependencies: onnxruntime-common "~1.14.0" onnxruntime-web@1.14.0: version "1.14.0" - resolved "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.14.0.tgz#c8cee538781b1d4c1c6b043934f4a3e6ddf1466e" + resolved "https://registry.yarnpkg.com/onnxruntime-web/-/onnxruntime-web-1.14.0.tgz#c8cee538781b1d4c1c6b043934f4a3e6ddf1466e" integrity sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw== dependencies: flatbuffers "^1.12.0" @@ -2114,7 +2114,7 @@ onnxruntime-web@1.14.0: openai@^4.26.0: version "4.31.0" - resolved "https://registry.npmjs.org/openai/-/openai-4.31.0.tgz#5d96045c4eb244fa21f0fff0981043a2c9f09e8c" + resolved "https://registry.yarnpkg.com/openai/-/openai-4.31.0.tgz#5d96045c4eb244fa21f0fff0981043a2c9f09e8c" integrity sha512-JebkRnRGEGLnJt3+bJ5B7au8nBeZvJjs9baVxDmUZ5+BgafAdy6KDxJGSuyaw/IA+ErqY3jmOH5cDC2mCDJF2w== dependencies: "@types/node" "^18.11.18" @@ -2129,7 +2129,7 @@ openai@^4.26.0: openai@^4.41.1, openai@^4.49.1: version "4.52.2" - resolved "https://registry.npmjs.org/openai/-/openai-4.52.2.tgz#5d67271f3df84c0b54676b08990eaa9402151759" + resolved "https://registry.yarnpkg.com/openai/-/openai-4.52.2.tgz#5d67271f3df84c0b54676b08990eaa9402151759" integrity sha512-mMc0XgFuVSkcm0lRIi8zaw++otC82ZlfkCur1qguXYWPETr/+ZwL9A/vvp3YahX+shpaT6j03dwsmUyLAfmEfg== dependencies: "@types/node" "^18.11.18" @@ -2143,17 +2143,17 @@ openai@^4.41.1, openai@^4.49.1: openapi-types@^12.1.3: version "12.1.3" - resolved "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz#471995eb26c4b97b7bd356aacf7b91b73e777dd3" + resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-12.1.3.tgz#471995eb26c4b97b7bd356aacf7b91b73e777dd3" integrity sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw== p-finally@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== p-queue@^6.6.2: version "6.6.2" - resolved "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== dependencies: eventemitter3 "^4.0.4" @@ -2161,7 +2161,7 @@ p-queue@^6.6.2: p-retry@4: version "4.6.2" - resolved "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== dependencies: "@types/retry" "0.12.0" @@ -2169,14 +2169,14 @@ p-retry@4: p-timeout@^3.2.0: version "3.2.0" - resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== dependencies: p-finally "^1.0.0" parseley@^0.12.0: version "0.12.1" - resolved "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz#4afd561d50215ebe259e3e7a853e62f600683aef" + resolved "https://registry.yarnpkg.com/parseley/-/parseley-0.12.1.tgz#4afd561d50215ebe259e3e7a853e62f600683aef" integrity sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw== dependencies: leac "^0.6.0" @@ -2184,17 +2184,17 @@ parseley@^0.12.0: parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-to-regexp@0.1.7: version "0.1.7" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== pdf-parse@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/pdf-parse/-/pdf-parse-1.1.1.tgz#745e07408679548b3995ff896fd38e96e19d14a7" + resolved "https://registry.yarnpkg.com/pdf-parse/-/pdf-parse-1.1.1.tgz#745e07408679548b3995ff896fd38e96e19d14a7" integrity sha512-v6ZJ/efsBpGrGGknjtq9J/oC8tZWq0KWL5vQrk2GlzLEQPUDB1ex+13Rmidl1neNN358Jn9EHZw5y07FFtaC7A== dependencies: debug "^3.1.0" @@ -2202,22 +2202,22 @@ pdf-parse@^1.1.1: peberminta@^0.9.0: version "0.9.0" - resolved "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz#8ec9bc0eb84b7d368126e71ce9033501dca2a352" + resolved "https://registry.yarnpkg.com/peberminta/-/peberminta-0.9.0.tgz#8ec9bc0eb84b7d368126e71ce9033501dca2a352" integrity sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ== picomatch@^2.0.4, picomatch@^2.2.1: version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== platform@^1.3.6: version "1.3.6" - resolved "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" + resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== prebuild-install@^7.1.1: version "7.1.2" - resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== dependencies: detect-libc "^2.0.0" @@ -2235,12 +2235,12 @@ prebuild-install@^7.1.1: prettier@^3.2.5: version "3.2.5" - resolved "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== protobufjs@^6.8.8: version "6.11.4" - resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== dependencies: "@protobufjs/aspromise" "^1.1.2" @@ -2259,7 +2259,7 @@ protobufjs@^6.8.8: proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" @@ -2267,17 +2267,17 @@ proxy-addr@~2.0.7: proxy-from-env@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pstree.remy@^1.1.8: version "1.1.8" - resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== pump@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" @@ -2285,24 +2285,24 @@ pump@^3.0.0: qs@6.11.0: version "6.11.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" queue-tick@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" + resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@2.5.2: version "2.5.2" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" @@ -2312,7 +2312,7 @@ raw-body@2.5.2: rc@^1.2.7: version "1.2.8" - resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" @@ -2322,7 +2322,7 @@ rc@^1.2.7: readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -2331,58 +2331,58 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" resolve-pkg-maps@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== retry@^0.13.1: version "0.13.1" - resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-stable-stringify@^2.3.1: version "2.4.3" - resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== "safer-buffer@>= 2.1.2 < 3": version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== selderee@^0.11.0: version "0.11.0" - resolved "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz#6af0c7983e073ad3e35787ffe20cefd9daf0ec8a" + resolved "https://registry.yarnpkg.com/selderee/-/selderee-0.11.0.tgz#6af0c7983e073ad3e35787ffe20cefd9daf0ec8a" integrity sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA== dependencies: parseley "^0.12.0" semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: version "7.6.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" send@0.18.0: version "0.18.0" - resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" @@ -2401,7 +2401,7 @@ send@0.18.0: serve-static@1.15.0: version "1.15.0" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" @@ -2411,7 +2411,7 @@ serve-static@1.15.0: set-function-length@^1.2.1: version "1.2.2" - resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: define-data-property "^1.1.4" @@ -2423,12 +2423,12 @@ set-function-length@^1.2.1: setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sharp@^0.32.0: version "0.32.6" - resolved "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz#6ad30c0b7cd910df65d5f355f774aa4fce45732a" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.32.6.tgz#6ad30c0b7cd910df65d5f355f774aa4fce45732a" integrity sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w== dependencies: color "^4.2.3" @@ -2442,7 +2442,7 @@ sharp@^0.32.0: side-channel@^1.0.4: version "1.0.6" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: call-bind "^1.0.7" @@ -2452,12 +2452,12 @@ side-channel@^1.0.4: simple-concat@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== simple-get@^4.0.0, simple-get@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== dependencies: decompress-response "^6.0.0" @@ -2466,21 +2466,21 @@ simple-get@^4.0.0, simple-get@^4.0.1: simple-swizzle@^0.2.2: version "0.2.2" - resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== dependencies: is-arrayish "^0.3.1" simple-update-notifier@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== dependencies: semver "^7.5.3" source-map-support@^0.5.21: version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -2488,22 +2488,22 @@ source-map-support@^0.5.21: source-map@^0.6.0: version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== stack-trace@0.0.x: version "0.0.10" - resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== statuses@2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== streamx@^2.15.0, streamx@^2.16.1: version "2.16.1" - resolved "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz#2b311bd34832f08aa6bb4d6a80297c9caef89614" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.16.1.tgz#2b311bd34832f08aa6bb4d6a80297c9caef89614" integrity sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ== dependencies: fast-fifo "^1.1.0" @@ -2513,31 +2513,31 @@ streamx@^2.15.0, streamx@^2.16.1: string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" strip-json-comments@~2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== strnum@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== supports-color@^5.5.0: version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" tar-fs@^2.0.0: version "2.1.1" - resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== dependencies: chownr "^1.1.1" @@ -2547,7 +2547,7 @@ tar-fs@^2.0.0: tar-fs@^3.0.4: version "3.0.6" - resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz#eaccd3a67d5672f09ca8e8f9c3d2b89fa173f217" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.6.tgz#eaccd3a67d5672f09ca8e8f9c3d2b89fa173f217" integrity sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w== dependencies: pump "^3.0.0" @@ -2558,7 +2558,7 @@ tar-fs@^3.0.4: tar-stream@^2.1.4: version "2.2.0" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: bl "^4.0.3" @@ -2569,7 +2569,7 @@ tar-stream@^2.1.4: tar-stream@^3.1.5: version "3.1.7" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== dependencies: b4a "^1.6.4" @@ -2578,41 +2578,41 @@ tar-stream@^3.1.5: text-hex@1.0.x: version "1.0.0" - resolved "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== touch@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== dependencies: nopt "~1.0.10" tr46@~0.0.3: version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== triple-beam@^1.3.0: version "1.4.1" - resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== ts-node@^10.9.2: version "10.9.2" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -2631,14 +2631,14 @@ ts-node@^10.9.2: tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" type-is@~1.6.18: version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" @@ -2646,82 +2646,82 @@ type-is@~1.6.18: typescript@^5.4.3: version "5.4.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== undefsafe@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== undici-types@~5.26.4: version "5.26.5" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== util-deprecate@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid@^10.0.0: version "10.0.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== uuid@^9.0.0: version "9.0.1" - resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== validate.io-array@^1.0.3, validate.io-array@^1.0.5: version "1.0.6" - resolved "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d" + resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d" integrity sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg== validate.io-function@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz#343a19802ed3b1968269c780e558e93411c0bad7" + resolved "https://registry.yarnpkg.com/validate.io-function/-/validate.io-function-1.0.2.tgz#343a19802ed3b1968269c780e558e93411c0bad7" integrity sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ== vary@^1, vary@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== web-streams-polyfill@4.0.0-beta.3: version "4.0.0-beta.3" - resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz#2898486b74f5156095e473efe989dcf185047a38" integrity sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug== web-streams-polyfill@^3.2.1: version "3.3.3" - resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -2729,7 +2729,7 @@ whatwg-url@^5.0.0: winston-transport@^4.7.0: version "4.7.0" - resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz#e302e6889e6ccb7f383b926df6936a5b781bd1f0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.7.0.tgz#e302e6889e6ccb7f383b926df6936a5b781bd1f0" integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg== dependencies: logform "^2.3.2" @@ -2738,7 +2738,7 @@ winston-transport@^4.7.0: winston@^3.13.0: version "3.13.0" - resolved "https://registry.npmjs.org/winston/-/winston-3.13.0.tgz#e76c0d722f78e04838158c61adc1287201de7ce3" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.13.0.tgz#e76c0d722f78e04838158c61adc1287201de7ce3" integrity sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ== dependencies: "@colors/colors" "^1.6.0" @@ -2755,40 +2755,40 @@ winston@^3.13.0: wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@^8.17.1: version "8.17.1" - resolved "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^2.2.1: version "2.4.1" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed" integrity sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg== yn@3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== zod-to-json-schema@^3.22.3: version "3.22.5" - resolved "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.22.5.tgz#3646e81cfc318dbad2a22519e5ce661615418673" + resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.22.5.tgz#3646e81cfc318dbad2a22519e5ce661615418673" integrity sha512-+akaPo6a0zpVCCseDed504KBJUQpEW5QZw7RMneNmKw+fGaML1Z9tUNLnHHAC8x6dzVRO1eB2oEMyZRnuBZg7Q== zod-to-json-schema@^3.22.4, zod-to-json-schema@^3.22.5: version "3.23.1" - resolved "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.23.1.tgz#5225925b8ed5fa20096bd99be076c4b29b53d309" + resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.23.1.tgz#5225925b8ed5fa20096bd99be076c4b29b53d309" integrity sha512-oT9INvydob1XV0v1d2IadrR74rLtDInLvDFfAa1CG0Pmg/vxATk7I2gSelfj271mbzeM4Da0uuDQE/Nkj3DWNw== zod@^3.22.3, zod@^3.22.4: version "3.22.4" - resolved "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== From 8057f28b20a8fcb26f5c546d17bcf316384d219c Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 18 Oct 2024 17:07:09 +0530 Subject: [PATCH 057/115] feat(settings): handle no models --- ui/components/SettingsDialog.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ui/components/SettingsDialog.tsx b/ui/components/SettingsDialog.tsx index 34ef26c..716dd7d 100644 --- a/ui/components/SettingsDialog.tsx +++ b/ui/components/SettingsDialog.tsx @@ -128,7 +128,9 @@ const SettingsDialog = ({ const chatModel = localStorage.getItem('chatModel') || (data.chatModelProviders && - data.chatModelProviders[chatModelProvider]?.[0].name) || + data.chatModelProviders[chatModelProvider]?.length > 0 + ? data.chatModelProviders[chatModelProvider][0].name + : undefined) || ''; const embeddingModelProvider = localStorage.getItem('embeddingModelProvider') || From 4576d3de1334ec14b7688865736e58c4620d06c5 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 18 Oct 2024 17:26:02 +0530 Subject: [PATCH 058/115] feat(dockerfile): update docker image --- .github/workflows/docker-build.yaml | 3 +++ app.dockerfile | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-build.yaml b/.github/workflows/docker-build.yaml index 3cd9044..f658c29 100644 --- a/.github/workflows/docker-build.yaml +++ b/.github/workflows/docker-build.yaml @@ -17,6 +17,9 @@ jobs: - name: Checkout code uses: actions/checkout@v3 + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 with: diff --git a/app.dockerfile b/app.dockerfile index ff1824d..fb91a54 100644 --- a/app.dockerfile +++ b/app.dockerfile @@ -1,4 +1,4 @@ -FROM node:alpine +FROM node:18-slim ARG NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001 ARG NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api @@ -9,7 +9,7 @@ WORKDIR /home/perplexica COPY ui /home/perplexica/ -RUN yarn install --frozen-lockfile +RUN yarn install --frozen-lockfile --network-timeout 600000 RUN yarn build CMD ["yarn", "start"] \ No newline at end of file From c8cd959496fa66a6cd36eb5bb79bad8e17c1c458 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 18 Oct 2024 17:29:26 +0530 Subject: [PATCH 059/115] feat(dockerfile): update backend image --- app.dockerfile | 4 ++-- backend.dockerfile | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app.dockerfile b/app.dockerfile index fb91a54..ff1824d 100644 --- a/app.dockerfile +++ b/app.dockerfile @@ -1,4 +1,4 @@ -FROM node:18-slim +FROM node:alpine ARG NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001 ARG NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api @@ -9,7 +9,7 @@ WORKDIR /home/perplexica COPY ui /home/perplexica/ -RUN yarn install --frozen-lockfile --network-timeout 600000 +RUN yarn install --frozen-lockfile RUN yarn build CMD ["yarn", "start"] \ No newline at end of file diff --git a/backend.dockerfile b/backend.dockerfile index e835b40..87cd21c 100644 --- a/backend.dockerfile +++ b/backend.dockerfile @@ -1,4 +1,4 @@ -FROM node:20-buster +FROM node:18-slim WORKDIR /home/perplexica @@ -10,7 +10,7 @@ COPY yarn.lock /home/perplexica/ RUN mkdir /home/perplexica/data -RUN yarn install --frozen-lockfile +RUN yarn install --frozen-lockfile --network-timeout 600000 RUN yarn build CMD ["yarn", "start"] \ No newline at end of file From dfb532e4d3c293664f6d61cf6ff0e540377226fa Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 18 Oct 2024 18:45:23 +0530 Subject: [PATCH 060/115] feat(package): bump version --- package.json | 2 +- ui/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 48efd23..e449fca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "perplexica-backend", - "version": "1.9.0", + "version": "1.9.1", "license": "MIT", "author": "ItzCrazyKns", "scripts": { diff --git a/ui/package.json b/ui/package.json index 70a144a..7f1255f 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,6 +1,6 @@ { "name": "perplexica-frontend", - "version": "1.9.0", + "version": "1.9.1", "license": "MIT", "author": "ItzCrazyKns", "scripts": { From 687cbb365fd60d90f9a7b18387c6c03fa9636f17 Mon Sep 17 00:00:00 2001 From: sjiampojamarn <18257803+sjiampojamarn@users.noreply.github.com> Date: Sun, 20 Oct 2024 17:00:20 -0700 Subject: [PATCH 061/115] Discover link to new page --- ui/app/discover/page.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/app/discover/page.tsx b/ui/app/discover/page.tsx index 7788d0d..eb94040 100644 --- a/ui/app/discover/page.tsx +++ b/ui/app/discover/page.tsx @@ -83,6 +83,7 @@ const Page = () => { href={`/?q=Summary: ${item.url}`} key={i} className="max-w-sm rounded-lg overflow-hidden bg-light-secondary dark:bg-dark-secondary hover:-translate-y-[1px] transition duration-200" + target="_blank" > <img className="object-cover w-full aspect-video" From 03d0ff2ca41f2e9ad8c0ae606b1136860fedbc9c Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Tue, 29 Oct 2024 19:59:58 +0530 Subject: [PATCH 062/115] feat(navbar): make delete & plus button work --- ui/components/ChatWindow.tsx | 2 +- ui/components/DeleteChat.tsx | 9 +++++++++ ui/components/Navbar.tsx | 24 +++++++++++++++++------- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index 986f8ae..7b2ce88 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -503,7 +503,7 @@ const ChatWindow = ({ id }: { id?: string }) => { <div> {messages.length > 0 ? ( <> - <Navbar messages={messages} /> + <Navbar chatId={chatId!} messages={messages} /> <Chat loading={loading} messages={messages} diff --git a/ui/components/DeleteChat.tsx b/ui/components/DeleteChat.tsx index f981e32..984db70 100644 --- a/ui/components/DeleteChat.tsx +++ b/ui/components/DeleteChat.tsx @@ -11,19 +11,24 @@ import { import { Fragment, useState } from 'react'; import { toast } from 'sonner'; import { Chat } from '@/app/library/page'; +import { useRouter } from 'next/navigation'; const DeleteChat = ({ chatId, chats, setChats, + redirect = false, }: { chatId: string; chats: Chat[]; setChats: (chats: Chat[]) => void; + redirect?: boolean; }) => { const [confirmationDialogOpen, setConfirmationDialogOpen] = useState(false); const [loading, setLoading] = useState(false); + const router = useRouter(); + const handleDelete = async () => { setLoading(true); try { @@ -44,6 +49,10 @@ const DeleteChat = ({ const newChats = chats.filter((chat) => chat.id !== chatId); setChats(newChats); + + if (redirect) { + router.push('/'); + } } catch (err: any) { toast.error(err.message); } finally { diff --git a/ui/components/Navbar.tsx b/ui/components/Navbar.tsx index 020dfb4..ca57a8b 100644 --- a/ui/components/Navbar.tsx +++ b/ui/components/Navbar.tsx @@ -2,8 +2,15 @@ import { Clock, Edit, Share, Trash } from 'lucide-react'; import { Message } from './ChatWindow'; import { useEffect, useState } from 'react'; import { formatTimeDifference } from '@/lib/utils'; +import DeleteChat from './DeleteChat'; -const Navbar = ({ messages }: { messages: Message[] }) => { +const Navbar = ({ + chatId, + messages, +}: { + messages: Message[]; + chatId: string; +}) => { const [title, setTitle] = useState<string>(''); const [timeAgo, setTimeAgo] = useState<string>(''); @@ -39,10 +46,12 @@ const Navbar = ({ messages }: { messages: Message[] }) => { return ( <div className="fixed z-40 top-0 left-0 right-0 px-4 lg:pl-[104px] lg:pr-6 lg:px-8 flex flex-row items-center justify-between w-full py-4 text-sm text-black dark:text-white/70 border-b bg-light-primary dark:bg-dark-primary border-light-100 dark:border-dark-200"> - <Edit - size={17} + <a + href="/" className="active:scale-95 transition duration-100 cursor-pointer lg:hidden" - /> + > + <Edit size={17} /> + </a> <div className="hidden lg:flex flex-row items-center justify-center space-x-2"> <Clock size={17} /> <p className="text-xs">{timeAgo} ago</p> @@ -54,10 +63,11 @@ const Navbar = ({ messages }: { messages: Message[] }) => { size={17} className="active:scale-95 transition duration-100 cursor-pointer" /> - <Trash + {/* <Trash size={17} - className="text-red-400 active:scale-95 transition duration-100 cursor-pointer" - /> + className='text-red-400 active:scale-95 transition duration-100 cursor-pointer' + /> */} + <DeleteChat redirect chatId={chatId} chats={[]} setChats={() => {}} /> </div> </div> ); From b33e5fefba5a120288abea2f205ccb6757b30ca9 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Tue, 29 Oct 2024 20:00:31 +0530 Subject: [PATCH 063/115] feat(navbar): remove comments --- ui/components/Navbar.tsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ui/components/Navbar.tsx b/ui/components/Navbar.tsx index ca57a8b..13f2da3 100644 --- a/ui/components/Navbar.tsx +++ b/ui/components/Navbar.tsx @@ -63,10 +63,6 @@ const Navbar = ({ size={17} className="active:scale-95 transition duration-100 cursor-pointer" /> - {/* <Trash - size={17} - className='text-red-400 active:scale-95 transition duration-100 cursor-pointer' - /> */} <DeleteChat redirect chatId={chatId} chats={[]} setChats={() => {}} /> </div> </div> From f1c0b5435b65c4c19b22a976b9cc686100458e07 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 30 Oct 2024 09:11:48 +0530 Subject: [PATCH 064/115] feat(delete-chat): use `window.location` to refresh page --- ui/components/DeleteChat.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ui/components/DeleteChat.tsx b/ui/components/DeleteChat.tsx index 984db70..2857fc8 100644 --- a/ui/components/DeleteChat.tsx +++ b/ui/components/DeleteChat.tsx @@ -11,7 +11,6 @@ import { import { Fragment, useState } from 'react'; import { toast } from 'sonner'; import { Chat } from '@/app/library/page'; -import { useRouter } from 'next/navigation'; const DeleteChat = ({ chatId, @@ -27,8 +26,6 @@ const DeleteChat = ({ const [confirmationDialogOpen, setConfirmationDialogOpen] = useState(false); const [loading, setLoading] = useState(false); - const router = useRouter(); - const handleDelete = async () => { setLoading(true); try { @@ -51,7 +48,7 @@ const DeleteChat = ({ setChats(newChats); if (redirect) { - router.push('/'); + window.location.href = '/'; } } catch (err: any) { toast.error(err.message); From 540f38ae6841860d30fbc55faa8ea5677b44f550 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 30 Oct 2024 09:14:09 +0530 Subject: [PATCH 065/115] feat(empty-chat): add settings for mobile --- ui/components/ChatWindow.tsx | 1 + ui/components/EmptyChat.tsx | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index 7b2ce88..f9bd583 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -318,6 +318,7 @@ const ChatWindow = ({ id }: { id?: string }) => { console.log('[DEBUG] closed'); } }; + // eslint-disable-next-line react-hooks/exhaustive-deps }, []); const messagesRef = useRef<Message[]>([]); diff --git a/ui/components/EmptyChat.tsx b/ui/components/EmptyChat.tsx index 63f186c..6b2412b 100644 --- a/ui/components/EmptyChat.tsx +++ b/ui/components/EmptyChat.tsx @@ -1,4 +1,7 @@ +import { Settings } from 'lucide-react'; import EmptyChatMessageInput from './EmptyChatMessageInput'; +import SettingsDialog from './SettingsDialog'; +import { useState } from 'react'; const EmptyChat = ({ sendMessage, @@ -13,8 +16,17 @@ const EmptyChat = ({ optimizationMode: string; setOptimizationMode: (mode: string) => void; }) => { + const [isSettingsOpen, setIsSettingsOpen] = useState(false); + return ( <div className="relative"> + <SettingsDialog isOpen={isSettingsOpen} setIsOpen={setIsSettingsOpen} /> + <div className="absolute w-full flex flex-row items-center justify-end mr-5 mt-5"> + <Settings + className="cursor-pointer lg:hidden" + onClick={() => setIsSettingsOpen(true)} + /> + </div> <div className="flex flex-col items-center justify-center min-h-screen max-w-screen-sm mx-auto p-2 space-y-8"> <h2 className="text-black/70 dark:text-white/70 text-3xl font-medium -mt-8"> Research begins here. From 7c6ee2ead1ee0489ffdfaf6ca04e31ddc7ff20d9 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 30 Oct 2024 10:28:31 +0530 Subject: [PATCH 066/115] feat(video-search): handle custom OpenAI --- src/routes/videos.ts | 62 ++++++++++++++++++++++++++++------ ui/components/MessageBox.tsx | 4 +-- ui/components/SearchImages.tsx | 19 ++++++++--- ui/components/SearchVideos.tsx | 19 ++++++++--- ui/lib/actions.ts | 15 ++++++-- 5 files changed, 94 insertions(+), 25 deletions(-) diff --git a/src/routes/videos.ts b/src/routes/videos.ts index 9d43fd2..a2555f5 100644 --- a/src/routes/videos.ts +++ b/src/routes/videos.ts @@ -4,14 +4,28 @@ import { getAvailableChatModelProviders } from '../lib/providers'; import { HumanMessage, AIMessage } from '@langchain/core/messages'; import logger from '../utils/logger'; import handleVideoSearch from '../agents/videoSearchAgent'; +import { ChatOpenAI } from '@langchain/openai'; const router = express.Router(); +interface ChatModel { + provider: string; + model: string; + customOpenAIBaseURL?: string; + customOpenAIKey?: string; +} + +interface VideoSearchBody { + query: string; + chatHistory: any[]; + chatModel?: ChatModel; +} + router.post('/', async (req, res) => { try { - let { query, chat_history, chat_model_provider, chat_model } = req.body; + let body: VideoSearchBody = req.body; - chat_history = chat_history.map((msg: any) => { + const chatHistory = body.chatHistory.map((msg: any) => { if (msg.role === 'user') { return new HumanMessage(msg.content); } else if (msg.role === 'assistant') { @@ -19,22 +33,50 @@ router.post('/', async (req, res) => { } }); - const chatModels = await getAvailableChatModelProviders(); - const provider = chat_model_provider ?? Object.keys(chatModels)[0]; - const chatModel = chat_model ?? Object.keys(chatModels[provider])[0]; + const chatModelProviders = await getAvailableChatModelProviders(); + + const chatModelProvider = + body.chatModel?.provider || Object.keys(chatModelProviders)[0]; + const chatModel = + body.chatModel?.model || + Object.keys(chatModelProviders[chatModelProvider])[0]; let llm: BaseChatModel | undefined; - if (chatModels[provider] && chatModels[provider][chatModel]) { - llm = chatModels[provider][chatModel].model as BaseChatModel | undefined; + if (body.chatModel?.provider === 'custom_openai') { + if ( + !body.chatModel?.customOpenAIBaseURL || + !body.chatModel?.customOpenAIKey + ) { + return res + .status(400) + .json({ message: 'Missing custom OpenAI base URL or key' }); + } + + llm = new ChatOpenAI({ + modelName: body.chatModel.model, + openAIApiKey: body.chatModel.customOpenAIKey, + temperature: 0.7, + configuration: { + baseURL: body.chatModel.customOpenAIBaseURL, + }, + }) as unknown as BaseChatModel; + } else if ( + chatModelProviders[chatModelProvider] && + chatModelProviders[chatModelProvider][chatModel] + ) { + llm = chatModelProviders[chatModelProvider][chatModel] + .model as unknown as BaseChatModel | undefined; } if (!llm) { - res.status(500).json({ message: 'Invalid LLM model selected' }); - return; + return res.status(400).json({ message: 'Invalid model selected' }); } - const videos = await handleVideoSearch({ chat_history, query }, llm); + const videos = await handleVideoSearch( + { chat_history: chatHistory, query: body.query }, + llm, + ); res.status(200).json({ videos }); } catch (err) { diff --git a/ui/components/MessageBox.tsx b/ui/components/MessageBox.tsx index b111088..5222c7c 100644 --- a/ui/components/MessageBox.tsx +++ b/ui/components/MessageBox.tsx @@ -186,10 +186,10 @@ const MessageBox = ({ <div className="lg:sticky lg:top-20 flex flex-col items-center space-y-3 w-full lg:w-3/12 z-30 h-full pb-4"> <SearchImages query={history[messageIndex - 1].content} - chat_history={history.slice(0, messageIndex - 1)} + chatHistory={history.slice(0, messageIndex - 1)} /> <SearchVideos - chat_history={history.slice(0, messageIndex - 1)} + chatHistory={history.slice(0, messageIndex - 1)} query={history[messageIndex - 1].content} /> </div> diff --git a/ui/components/SearchImages.tsx b/ui/components/SearchImages.tsx index 6025925..b083af7 100644 --- a/ui/components/SearchImages.tsx +++ b/ui/components/SearchImages.tsx @@ -13,10 +13,10 @@ type Image = { const SearchImages = ({ query, - chat_history, + chatHistory, }: { query: string; - chat_history: Message[]; + chatHistory: Message[]; }) => { const [images, setImages] = useState<Image[] | null>(null); const [loading, setLoading] = useState(false); @@ -33,6 +33,9 @@ const SearchImages = ({ const chatModelProvider = localStorage.getItem('chatModelProvider'); const chatModel = localStorage.getItem('chatModel'); + const customOpenAIBaseURL = localStorage.getItem('openAIBaseURL'); + const customOpenAIKey = localStorage.getItem('openAIApiKey'); + const res = await fetch( `${process.env.NEXT_PUBLIC_API_URL}/images`, { @@ -42,9 +45,15 @@ const SearchImages = ({ }, body: JSON.stringify({ query: query, - chat_history: chat_history, - chat_model_provider: chatModelProvider, - chat_model: chatModel, + chatHistory: chatHistory, + chatModel: { + provider: chatModelProvider, + model: chatModel, + ...(chatModelProvider === 'custom_openai' && { + customOpenAIBaseURL: customOpenAIBaseURL, + customOpenAIKey: customOpenAIKey, + }), + }, }), }, ); diff --git a/ui/components/SearchVideos.tsx b/ui/components/SearchVideos.tsx index fec229c..2d820ef 100644 --- a/ui/components/SearchVideos.tsx +++ b/ui/components/SearchVideos.tsx @@ -26,10 +26,10 @@ declare module 'yet-another-react-lightbox' { const Searchvideos = ({ query, - chat_history, + chatHistory, }: { query: string; - chat_history: Message[]; + chatHistory: Message[]; }) => { const [videos, setVideos] = useState<Video[] | null>(null); const [loading, setLoading] = useState(false); @@ -46,6 +46,9 @@ const Searchvideos = ({ const chatModelProvider = localStorage.getItem('chatModelProvider'); const chatModel = localStorage.getItem('chatModel'); + const customOpenAIBaseURL = localStorage.getItem('openAIBaseURL'); + const customOpenAIKey = localStorage.getItem('openAIApiKey'); + const res = await fetch( `${process.env.NEXT_PUBLIC_API_URL}/videos`, { @@ -55,9 +58,15 @@ const Searchvideos = ({ }, body: JSON.stringify({ query: query, - chat_history: chat_history, - chat_model_provider: chatModelProvider, - chat_model: chatModel, + chatHistory: chatHistory, + chatModel: { + provider: chatModelProvider, + model: chatModel, + ...(chatModelProvider === 'custom_openai' && { + customOpenAIBaseURL: customOpenAIBaseURL, + customOpenAIKey: customOpenAIKey, + }), + }, }), }, ); diff --git a/ui/lib/actions.ts b/ui/lib/actions.ts index d7eb71f..a4409b0 100644 --- a/ui/lib/actions.ts +++ b/ui/lib/actions.ts @@ -4,15 +4,24 @@ export const getSuggestions = async (chatHisory: Message[]) => { const chatModel = localStorage.getItem('chatModel'); const chatModelProvider = localStorage.getItem('chatModelProvider'); + const customOpenAIKey = localStorage.getItem('openAIApiKey'); + const customOpenAIBaseURL = localStorage.getItem('openAIBaseURL'); + const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/suggestions`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ - chat_history: chatHisory, - chat_model: chatModel, - chat_model_provider: chatModelProvider, + chatHistory: chatHisory, + chatModel: { + provider: chatModelProvider, + model: chatModel, + ...(chatModelProvider === 'custom_openai' && { + customOpenAIKey, + customOpenAIBaseURL, + }), + }, }), }); From 3e7645614f1262c7584294c35cbd3880a474dbdc Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 30 Oct 2024 10:28:40 +0530 Subject: [PATCH 067/115] feat(image-search): handle custom OpenAI --- src/routes/images.ts | 62 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 52 insertions(+), 10 deletions(-) diff --git a/src/routes/images.ts b/src/routes/images.ts index 7806ce7..c54dc40 100644 --- a/src/routes/images.ts +++ b/src/routes/images.ts @@ -4,14 +4,28 @@ import { BaseChatModel } from '@langchain/core/language_models/chat_models'; import { getAvailableChatModelProviders } from '../lib/providers'; import { HumanMessage, AIMessage } from '@langchain/core/messages'; import logger from '../utils/logger'; +import { ChatOpenAI } from '@langchain/openai'; const router = express.Router(); +interface ChatModel { + provider: string; + model: string; + customOpenAIBaseURL?: string; + customOpenAIKey?: string; +} + +interface ImageSearchBody { + query: string; + chatHistory: any[]; + chatModel?: ChatModel; +} + router.post('/', async (req, res) => { try { - let { query, chat_history, chat_model_provider, chat_model } = req.body; + let body: ImageSearchBody = req.body; - chat_history = chat_history.map((msg: any) => { + const chatHistory = body.chatHistory.map((msg: any) => { if (msg.role === 'user') { return new HumanMessage(msg.content); } else if (msg.role === 'assistant') { @@ -19,22 +33,50 @@ router.post('/', async (req, res) => { } }); - const chatModels = await getAvailableChatModelProviders(); - const provider = chat_model_provider ?? Object.keys(chatModels)[0]; - const chatModel = chat_model ?? Object.keys(chatModels[provider])[0]; + const chatModelProviders = await getAvailableChatModelProviders(); + + const chatModelProvider = + body.chatModel?.provider || Object.keys(chatModelProviders)[0]; + const chatModel = + body.chatModel?.model || + Object.keys(chatModelProviders[chatModelProvider])[0]; let llm: BaseChatModel | undefined; - if (chatModels[provider] && chatModels[provider][chatModel]) { - llm = chatModels[provider][chatModel].model as BaseChatModel | undefined; + if (body.chatModel?.provider === 'custom_openai') { + if ( + !body.chatModel?.customOpenAIBaseURL || + !body.chatModel?.customOpenAIKey + ) { + return res + .status(400) + .json({ message: 'Missing custom OpenAI base URL or key' }); + } + + llm = new ChatOpenAI({ + modelName: body.chatModel.model, + openAIApiKey: body.chatModel.customOpenAIKey, + temperature: 0.7, + configuration: { + baseURL: body.chatModel.customOpenAIBaseURL, + }, + }) as unknown as BaseChatModel; + } else if ( + chatModelProviders[chatModelProvider] && + chatModelProviders[chatModelProvider][chatModel] + ) { + llm = chatModelProviders[chatModelProvider][chatModel] + .model as unknown as BaseChatModel | undefined; } if (!llm) { - res.status(500).json({ message: 'Invalid LLM model selected' }); - return; + return res.status(400).json({ message: 'Invalid model selected' }); } - const images = await handleImageSearch({ query, chat_history }, llm); + const images = await handleImageSearch( + { query: body.query, chat_history: chatHistory }, + llm, + ); res.status(200).json({ images }); } catch (err) { From 65d057a05ec24ae717e97347d9dee4544c2273e1 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 30 Oct 2024 10:29:06 +0530 Subject: [PATCH 068/115] feat(suggestions): handle custom OpenAI --- src/routes/suggestions.ts | 61 ++++++++++++++++++++++++++++++++------- 1 file changed, 51 insertions(+), 10 deletions(-) diff --git a/src/routes/suggestions.ts b/src/routes/suggestions.ts index a75657e..e997b1e 100644 --- a/src/routes/suggestions.ts +++ b/src/routes/suggestions.ts @@ -4,14 +4,27 @@ import { BaseChatModel } from '@langchain/core/language_models/chat_models'; import { getAvailableChatModelProviders } from '../lib/providers'; import { HumanMessage, AIMessage } from '@langchain/core/messages'; import logger from '../utils/logger'; +import { ChatOpenAI } from '@langchain/openai'; const router = express.Router(); +interface ChatModel { + provider: string; + model: string; + customOpenAIBaseURL?: string; + customOpenAIKey?: string; +} + +interface SuggestionsBody { + chatHistory: any[]; + chatModel?: ChatModel; +} + router.post('/', async (req, res) => { try { - let { chat_history, chat_model, chat_model_provider } = req.body; + let body: SuggestionsBody = req.body; - chat_history = chat_history.map((msg: any) => { + const chatHistory = body.chatHistory.map((msg: any) => { if (msg.role === 'user') { return new HumanMessage(msg.content); } else if (msg.role === 'assistant') { @@ -19,22 +32,50 @@ router.post('/', async (req, res) => { } }); - const chatModels = await getAvailableChatModelProviders(); - const provider = chat_model_provider ?? Object.keys(chatModels)[0]; - const chatModel = chat_model ?? Object.keys(chatModels[provider])[0]; + const chatModelProviders = await getAvailableChatModelProviders(); + + const chatModelProvider = + body.chatModel?.provider || Object.keys(chatModelProviders)[0]; + const chatModel = + body.chatModel?.model || + Object.keys(chatModelProviders[chatModelProvider])[0]; let llm: BaseChatModel | undefined; - if (chatModels[provider] && chatModels[provider][chatModel]) { - llm = chatModels[provider][chatModel].model as BaseChatModel | undefined; + if (body.chatModel?.provider === 'custom_openai') { + if ( + !body.chatModel?.customOpenAIBaseURL || + !body.chatModel?.customOpenAIKey + ) { + return res + .status(400) + .json({ message: 'Missing custom OpenAI base URL or key' }); + } + + llm = new ChatOpenAI({ + modelName: body.chatModel.model, + openAIApiKey: body.chatModel.customOpenAIKey, + temperature: 0.7, + configuration: { + baseURL: body.chatModel.customOpenAIBaseURL, + }, + }) as unknown as BaseChatModel; + } else if ( + chatModelProviders[chatModelProvider] && + chatModelProviders[chatModelProvider][chatModel] + ) { + llm = chatModelProviders[chatModelProvider][chatModel] + .model as unknown as BaseChatModel | undefined; } if (!llm) { - res.status(500).json({ message: 'Invalid LLM model selected' }); - return; + return res.status(400).json({ message: 'Invalid model selected' }); } - const suggestions = await generateSuggestions({ chat_history }, llm); + const suggestions = await generateSuggestions( + { chat_history: chatHistory }, + llm, + ); res.status(200).json({ suggestions: suggestions }); } catch (err) { From 012dfa5a74515a309da05c5b86ecb4b28c0d48ab Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 30 Oct 2024 10:29:21 +0530 Subject: [PATCH 069/115] feat(listLineOutputParser): handle unclosed tags --- src/lib/outputParsers/listLineOutputParser.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/outputParsers/listLineOutputParser.ts b/src/lib/outputParsers/listLineOutputParser.ts index 1e2f0f5..fcd2f07 100644 --- a/src/lib/outputParsers/listLineOutputParser.ts +++ b/src/lib/outputParsers/listLineOutputParser.ts @@ -23,7 +23,7 @@ class LineListOutputParser extends BaseOutputParser<string[]> { const startKeyIndex = text.indexOf(`<${this.key}>`); const endKeyIndex = text.indexOf(`</${this.key}>`); - if (startKeyIndex === -1 || endKeyIndex === -1) { + if (startKeyIndex === -1 && endKeyIndex === -1) { return []; } From 1e99fe8d697b0f77d74f875df925873e1da07520 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 31 Oct 2024 11:08:49 +0530 Subject: [PATCH 070/115] feat(package): bump version --- package.json | 2 +- ui/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e449fca..d84e1a6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "perplexica-backend", - "version": "1.9.1", + "version": "1.9.2", "license": "MIT", "author": "ItzCrazyKns", "scripts": { diff --git a/ui/package.json b/ui/package.json index 7f1255f..c5cce51 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,6 +1,6 @@ { "name": "perplexica-frontend", - "version": "1.9.1", + "version": "1.9.2", "license": "MIT", "author": "ItzCrazyKns", "scripts": { From afb4786ac0088844b910e7e9f0957a4c2e3c3b46 Mon Sep 17 00:00:00 2001 From: litc0de <litc0de@posteo.org> Date: Sun, 3 Nov 2024 10:33:01 +0100 Subject: [PATCH 071/115] add db setup to CONTRIBUTING.md --- CONTRIBUTING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c779f91..73256bd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -18,7 +18,8 @@ Before diving into coding, setting up your local environment is key. Here's what 1. In the root directory, locate the `sample.config.toml` file. 2. Rename it to `config.toml` and fill in the necessary configuration fields specific to the backend. 3. Run `npm install` to install dependencies. -4. Use `npm run dev` to start the backend in development mode. +4. Run `npm run db:push` to set up the local sqlite. +5. Use `npm run dev` to start the backend in development mode. ### Frontend From 7c01d2656ea834fdafe66d62d24d772810e6c8b3 Mon Sep 17 00:00:00 2001 From: Sharun <sharun@sharunkumar.com> Date: Mon, 4 Nov 2024 22:00:08 -0600 Subject: [PATCH 072/115] fix(EmptyChatMessageInput): focus on mount --- ui/components/EmptyChatMessageInput.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ui/components/EmptyChatMessageInput.tsx b/ui/components/EmptyChatMessageInput.tsx index 845bed9..42ad917 100644 --- a/ui/components/EmptyChatMessageInput.tsx +++ b/ui/components/EmptyChatMessageInput.tsx @@ -40,6 +40,8 @@ const EmptyChatMessageInput = ({ document.addEventListener('keydown', handleKeyDown); + inputRef.current?.focus(); + return () => { document.removeEventListener('keydown', handleKeyDown); }; From a1a7470ca6b43cc66677c9119505c0cf901207bf Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 14 Nov 2024 13:35:10 +0530 Subject: [PATCH 073/115] feat(package): update `markdown-to-jsx` --- ui/package.json | 2 +- ui/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ui/package.json b/ui/package.json index c5cce51..098926a 100644 --- a/ui/package.json +++ b/ui/package.json @@ -18,7 +18,7 @@ "clsx": "^2.1.0", "langchain": "^0.1.30", "lucide-react": "^0.363.0", - "markdown-to-jsx": "^7.4.5", + "markdown-to-jsx": "^7.6.2", "next": "14.1.4", "next-themes": "^0.3.0", "react": "^18", diff --git a/ui/yarn.lock b/ui/yarn.lock index fad2596..550a20c 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -2210,10 +2210,10 @@ lucide-react@^0.363.0: resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.363.0.tgz#2bb1f9d09b830dda86f5118fcd097f87247fe0e3" integrity sha512-AlsfPCsXQyQx7wwsIgzcKOL9LwC498LIMAo+c0Es5PkHJa33xwmYAkkSoKoJWWWSYQEStqu58/jT4tL2gi32uQ== -markdown-to-jsx@^7.4.5: - version "7.4.6" - resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.4.6.tgz#1ea0018c549bf00c9ce35e8f4ea57e48028d9cf7" - integrity sha512-3cyNxI/PwotvYkjg6KmFaN1uyN/7NqETteD2DobBB8ro/FR9jsHIh4Fi7ywAz0s9QHRKCmGlOUggs5GxSWACKA== +markdown-to-jsx@^7.6.2: + version "7.6.2" + resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.6.2.tgz#254cbf7d412a37073486c0a2dd52266d2191a793" + integrity sha512-gEcyiJXzBxmId2Y/kydLbD6KRNccDiUy/Src1cFGn3s2X0LZZ/hUiEc2VisFyA5kUE3SXclTCczjQiAuqKZiFQ== md5@^2.3.0: version "2.3.0" From f3e918c3e39debf7310a052799d6f1ae41f7b5f0 Mon Sep 17 00:00:00 2001 From: Damien Laureaux <d.laureaux@timoa.com> Date: Fri, 15 Nov 2024 07:04:45 +0100 Subject: [PATCH 074/115] chore(docs): fix Markdown lint issues in the docs --- docs/API/SEARCH.md | 34 ++++++------- docs/architecture/README.md | 2 +- docs/architecture/WORKING.md | 6 +-- docs/installation/NETWORKING.md | 90 ++++++++++++++++----------------- docs/installation/UPDATING.md | 24 ++++----- 5 files changed, 78 insertions(+), 78 deletions(-) diff --git a/docs/API/SEARCH.md b/docs/API/SEARCH.md index f87e788..9405bc5 100644 --- a/docs/API/SEARCH.md +++ b/docs/API/SEARCH.md @@ -79,24 +79,24 @@ The response from the API includes both the final message and the sources used t ```json { - "message": "Perplexica is an innovative, open-source AI-powered search engine designed to enhance the way users search for information online. Here are some key features and characteristics of Perplexica:\n\n- **AI-Powered Technology**: It utilizes advanced machine learning algorithms to not only retrieve information but also to understand the context and intent behind user queries, providing more relevant results [1][5].\n\n- **Open-Source**: Being open-source, Perplexica offers flexibility and transparency, allowing users to explore its functionalities without the constraints of proprietary software [3][10].", - "sources": [ - { - "pageContent": "Perplexica is an innovative, open-source AI-powered search engine designed to enhance the way users search for information online.", - "metadata": { - "title": "What is Perplexica, and how does it function as an AI-powered search ...", - "url": "https://askai.glarity.app/search/What-is-Perplexica--and-how-does-it-function-as-an-AI-powered-search-engine" - } - }, - { - "pageContent": "Perplexica is an open-source AI-powered search tool that dives deep into the internet to find precise answers.", - "metadata": { - "title": "Sahar Mor's Post", - "url": "https://www.linkedin.com/posts/sahar-mor_a-new-open-source-project-called-perplexica-activity-7204489745668694016-ncja" - } - } + "message": "Perplexica is an innovative, open-source AI-powered search engine designed to enhance the way users search for information online. Here are some key features and characteristics of Perplexica:\n\n- **AI-Powered Technology**: It utilizes advanced machine learning algorithms to not only retrieve information but also to understand the context and intent behind user queries, providing more relevant results [1][5].\n\n- **Open-Source**: Being open-source, Perplexica offers flexibility and transparency, allowing users to explore its functionalities without the constraints of proprietary software [3][10].", + "sources": [ + { + "pageContent": "Perplexica is an innovative, open-source AI-powered search engine designed to enhance the way users search for information online.", + "metadata": { + "title": "What is Perplexica, and how does it function as an AI-powered search ...", + "url": "https://askai.glarity.app/search/What-is-Perplexica--and-how-does-it-function-as-an-AI-powered-search-engine" + } + }, + { + "pageContent": "Perplexica is an open-source AI-powered search tool that dives deep into the internet to find precise answers.", + "metadata": { + "title": "Sahar Mor's Post", + "url": "https://www.linkedin.com/posts/sahar-mor_a-new-open-source-project-called-perplexica-activity-7204489745668694016-ncja" + } + } .... - ] + ] } ``` diff --git a/docs/architecture/README.md b/docs/architecture/README.md index b1fcfcb..5732471 100644 --- a/docs/architecture/README.md +++ b/docs/architecture/README.md @@ -1,4 +1,4 @@ -## Perplexica's Architecture +# Perplexica's Architecture Perplexica's architecture consists of the following key components: diff --git a/docs/architecture/WORKING.md b/docs/architecture/WORKING.md index e39de7a..75b20fd 100644 --- a/docs/architecture/WORKING.md +++ b/docs/architecture/WORKING.md @@ -1,4 +1,4 @@ -## How does Perplexica work? +# How does Perplexica work? Curious about how Perplexica works? Don't worry, we'll cover it here. Before we begin, make sure you've read about the architecture of Perplexica to ensure you understand what it's made up of. Haven't read it? You can read it [here](https://github.com/ItzCrazyKns/Perplexica/tree/master/docs/architecture/README.md). @@ -10,10 +10,10 @@ We'll understand how Perplexica works by taking an example of a scenario where a 4. After the information is retrieved, it is based on keyword-based search. We then convert the information into embeddings and the query as well, then we perform a similarity search to find the most relevant sources to answer the query. 5. After all this is done, the sources are passed to the response generator. This chain takes all the chat history, the query, and the sources. It generates a response that is streamed to the UI. -### How are the answers cited? +## How are the answers cited? The LLMs are prompted to do so. We've prompted them so well that they cite the answers themselves, and using some UI magic, we display it to the user. -### Image and Video Search +## Image and Video Search Image and video searches are conducted in a similar manner. A query is always generated first, then we search the web for images and videos that match the query. These results are then returned to the user. diff --git a/docs/installation/NETWORKING.md b/docs/installation/NETWORKING.md index baad296..6cb9bfe 100644 --- a/docs/installation/NETWORKING.md +++ b/docs/installation/NETWORKING.md @@ -10,27 +10,27 @@ This guide will show you how to make Perplexica available over a network. Follow 3. Stop and remove the existing Perplexica containers and images: -``` -docker compose down --rmi all -``` + ```bash + docker compose down --rmi all + ``` 4. Open the `docker-compose.yaml` file in a text editor like Notepad++ 5. Replace `127.0.0.1` with the IP address of the server Perplexica is running on in these two lines: -``` -args: - - NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api - - NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001 -``` + ```bash + args: + - NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api + - NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001 + ``` 6. Save and close the `docker-compose.yaml` file 7. Rebuild and restart the Perplexica container: -``` -docker compose up -d --build -``` + ```bash + docker compose up -d --build + ``` ## macOS @@ -38,37 +38,37 @@ docker compose up -d --build 2. Navigate to the directory with the `docker-compose.yaml` file: -``` -cd /path/to/docker-compose.yaml -``` + ```bash + cd /path/to/docker-compose.yaml + ``` 3. Stop and remove existing containers and images: -``` -docker compose down --rmi all -``` + ```bash + docker compose down --rmi all + ``` 4. Open `docker-compose.yaml` in a text editor like Sublime Text: -``` -nano docker-compose.yaml -``` + ```bash + nano docker-compose.yaml + ``` 5. Replace `127.0.0.1` with the server IP in these lines: -``` -args: - - NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api - - NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001 -``` + ```bash + args: + - NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api + - NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001 + ``` 6. Save and exit the editor 7. Rebuild and restart Perplexica: -``` -docker compose up -d --build -``` + ```bash + docker compose up -d --build + ``` ## Linux @@ -76,34 +76,34 @@ docker compose up -d --build 2. Navigate to the `docker-compose.yaml` directory: -``` -cd /path/to/docker-compose.yaml -``` + ```bash + cd /path/to/docker-compose.yaml + ``` 3. Stop and remove containers and images: -``` -docker compose down --rmi all -``` + ```bash + docker compose down --rmi all + ``` 4. Edit `docker-compose.yaml`: -``` -nano docker-compose.yaml -``` + ```bash + nano docker-compose.yaml + ``` 5. Replace `127.0.0.1` with the server IP: -``` -args: - - NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api - - NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001 -``` + ```bash + args: + - NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api + - NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001 + ``` 6. Save and exit the editor 7. Rebuild and restart Perplexica: -``` -docker compose up -d --build -``` + ```bash + docker compose up -d --build + ``` diff --git a/docs/installation/UPDATING.md b/docs/installation/UPDATING.md index 031a3e8..b41b05a 100644 --- a/docs/installation/UPDATING.md +++ b/docs/installation/UPDATING.md @@ -6,23 +6,23 @@ To update Perplexica to the latest version, follow these steps: 1. Clone the latest version of Perplexica from GitHub: -```bash - git clone https://github.com/ItzCrazyKns/Perplexica.git -``` + ```bash + git clone https://github.com/ItzCrazyKns/Perplexica.git + ``` 2. Navigate to the Project Directory. 3. Pull latest images from registry. -```bash -docker compose pull -``` + ```bash + docker compose pull + ``` 4. Update and Recreate containers. -```bash -docker compose up -d -``` + ```bash + docker compose up -d + ``` 5. Once the command completes running go to http://localhost:3000 and verify the latest changes. @@ -30,9 +30,9 @@ docker compose up -d 1. Clone the latest version of Perplexica from GitHub: -```bash - git clone https://github.com/ItzCrazyKns/Perplexica.git -``` + ```bash + git clone https://github.com/ItzCrazyKns/Perplexica.git + ``` 2. Navigate to the Project Directory 3. Execute `npm i` in both the `ui` folder and the root directory. From d789c970b197c13048dfdaf70dc490a1ccc565f1 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Sun, 17 Nov 2024 22:55:57 +0530 Subject: [PATCH 075/115] feat(assets): update screenshot --- .assets/perplexica-screenshot.png | Bin 154752 -> 656226 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/.assets/perplexica-screenshot.png b/.assets/perplexica-screenshot.png index c47a544f3b656f0af1e3c2036a3318683edd0bb0..fc7a697b9b0a34990903d18109eef121e360c524 100644 GIT binary patch literal 656226 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⪙fjcm_~?YyLYM8?4*#6f7kRv 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ΞdkeWUbTYl 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%0AO7xco7~5!W58jP8&2q+%<Ctt?6i9{llTq#>y> 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 W<cEf9nWzJLp2jMol^EI!j}KLJRO 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 !qrFo^^Ssz&LK~C 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"?&=<VLacoJzkHRH6LISb<KT$Rribt~C z9+!J89k)r_2OZo^94s~M=nbJk#gl#QxO!UX3Z9!dE(?wO_U=6s6Ib?eoO#|pehTbK znk^ckMQumPv|6urQ=WlsPpF`!N}ruMMhnPQ<6$z>k>#GzFNz=3Nm^7#4j<P%{H`eI zgIRoRdDn5L`^>hibI`qB%a{w_Dj!X#*{9OBS->nP(3a3+^+ON*zxQ=n_pTg7N(8Yg zM4X=D&`~L0Yxk@iG)ZC`dVeL_$%Wge4v-?^o18=fuk(ZCkS_mBAik^xg0en5$agwG zO8QL|JAiyWZ^RP<blMQ)A{Sl0*o1zs!<d7ovF%&md<}Z9prMZgCVZV?c)gcxIIkh$ zdNn4m#gdpx-FN%9)~3yKHR#J4x0v*Gu_@haBKgG2k*ffT2lTTm1KfeS-5I`;_NnHf zF`cO2ot${ca8zD=v;Www?iwME744CGxQRV0?kAvDq?_K7Hg^TobC>U%_vLw3MNICW zX58h*mWMVb#Mh>%1KkCcVnoAJ=Mg>qmJl-BbXTB=#TGq#AD<y$cP_)yaOx*~lg_$w z?g^nZ1T(*%msC>UQYGBg+0%tZ`4fIj<iF#Lwm1d7==gO@UO(__LfaBluKmnL&}`|q z;T)#0z!d8d_Zi>R!{H0F<w^;_w~U79+xDvM-8dk>j(0sDr*~-f)X%S)<-a))n=}F5 z(AV=+&LgtI6F-TE|DLINd}sYhOf-ZVt95`fm9JXpw$nr|46oNAzGrB{&}?>l551$# zRGk7luX<FopBzq<Z{M)3k@Zy=vgkCJ&P}Yg4UJ9x<0&}<g8lcj&foi?&Ja*%JJ<M+ zP+Kn;nNy*U&-^<Sqe=C8PQ!FimThfzHW8^E#scBgBmeI6!X?U#p+QmG2H1VX!px=q z8^0BS2VuG^rgYsbWZ2z2$iC60?Q8&FL++uT9r%;m>fmml<?!J?L$&bTKdpr1GnG%+ z8UE2N{MV1)l>uuO+Q?Z{|2dF?*H1J%`)^-M<wyC|Utbo3P!$*DMeoT#1v6qmAg8_Y zPxlV`R>t?^nQnWJc&{}C$Jm%^JX}^{Set@RX}j^<zbAU~D0Fw-gYF~^U4_HeVAl9b z&z!HCy5V7Z>to#!xgg6cTQ7Ge%MG9#v=vyqB%~^{1mclzD#gh~|H8uipXSkjc}bnL zkAMMaM+5T<A?W=4duRXSo$(9V_f9$3y8{(n9MRZ*^4SFS>*H%l$<lduS~11zK#(pL z`LfC6%+J5YrG+b++xj0WJ^?oW7#VMch*YFK&p$Pyzoo(dH;CnBgnU80HV9yzGKscT z<e7cAlcGC&kZ?L}4SiAoK3GHpAWRs3wrSD5xpm%fWaR|Te_p_;3Vsm73`Da;DRV72 zX-$1mk)R`?@t-H>k+>iV%>F{$$}jZ?y#n|@!yLT-f$o9Jul}Hn*AoT&mktvS?~=5s z1O)xQ)#0mKIdp;p7W~Zb^70^+ID9wf(T=gDklp?)_~dyy;GfbJa=Mi;olC8g2!2B? zq;40NCp7|jy@UJQR|R1IGlN3D=ZNI9$8Rxx1&D$Njxc5a?-(D~&jIVg`nE@86YwUS z7%JuYA0POC`V#*9nZXgs$0<Kwj2<BQh^@rJ|Ch7W?*eOJr{w=gKL1DZ`G;utKmREI ze<Yv(Bl-M?J0t|7as6Kb<1t6UspliT3;&M+6Y>?nHkY}*uyhajbiDCr5AzH8O!Zde z@Uf>hu3*zfdfQbLn*IwH@%=Ac#G4lI9Jf}_a$Cq-mkzgX+#U>b`Rxl)U7f}8i|-Ij zOY@}0Y}$r8)vpZ|k7{DUl2G%AM$SP}>Q!zR15>nlreRBczOn$49|T{BIu*s`)PFj2 zYxzwZr<*=W!@#0*O>e2?bIn1^El5wVw<x&MP{l0`j#cAfeg|JE<bq>ARv}%-(;0l8 zEQ55_C>yVWHi9_}2tRcn+ZV@@Z3@j)jL>!9wL1lyp2;TXjmqs+@MuJTK-KC0JUv7H zl}$bX&WvrhHcsI2<qOZAqaH4*S&9A?pbveKCzG`ABCq+iEKKbW2SVYYizw&pe=sGi z=?r;J*%fhw#2I2m{2vyXU8yuT(#3L4XS~)!c-EV#7M^`koR3Z_Y*=v`nMXfGpqSNy zO#4#uvuV<RtHEo{YM8ZxEgKu!T+oiB*W1RzA+-yUIUgf{tS+(Lmy-q0ZgOqy?4HpC z?Mht7#4&#-49t@QovH;cS%UUK_4l*L)O^E%$6)7$1|xxy3ksITLpzrh_9Px_(iJS1 z&#ieB?+ogWlSK}mXas{jFuZ~5j~m<S*dzXFgU<)(r%q_FIpi`xKZT%p438*!Z-B#H z^jxcOJ8&}=x*ui<{Z~o1cWGM9aryJg{t(Ak1XLwOOi=qMc<|h?-YWV0@kW}HCI{iA zf%-Imi=zuMX~VO5g5zWbee7IS1|7<m?pBbmer_X)p;i4PU(egT1>gdPAmov^Y;IRn z5+2#$$ZIN+$lCK@O-pqL3EoNLO7l{|!2@+ul=RhDox+JL&I^+Kg;<2Ec5GZ4#aY3s zFpb0cz+w#^Wpp=rr(lL_diRyhe;P;Akw?HfZ%Ppv&Qnr@hrgpadO6^Lj|xq@9b(<X z9w<N7nk_qwv6T6K$+h;95%kg~iSP*5G<|J!TqzxJO^d8sxk3Qz2#(?pe=FOwraxU2 zO$IsLEz?Hp%Fw;JBcINzp&4zEAwMS+MV(ebm1&wBZl{kkGALENvI$){2O|NKI(FSi z&tmrXPBF+%6uvL%yMW$s5<RImojp)VMg<iUC2<Q6_2_vdH&Zf`e)Z9RD=S9N4Kq2< z=!TU|KYt?NzL?IMmSj;qzMH`ak$I5QOx5L_{X73O=^Uifqg}gQWKs<p?u6=(_A9z- zGsoQ;#Y>Y<d77%gLdmP6MKjavBPXiS4RVKAWezX;^$}dX<P(ldMhxHD03OZ1*+t}g zfYPwAn!m7!{zi$3`L>ed5x@5KQMSLIVYBQtQ07}PeLbCbf+@`IQZdb6mQzeQhOc)O zP)-K|z6?9RA7u>r4J?LNm{L9(?lbyC={y$f%|bp=5;%SqS&(1)3Kv=}x76Hd@#|Ec zt^e<0uKp8DV$8)&Ny!G(X(aBa!V}26w`6z3gBtgM7~vK8UmO=jX0t{rw(jr8)Y)q* z;;zg+tA5FaWWsL$T2+79!dg!1^b)2bLjmK6ALw{ZTJGy9bW}H+_RZpkO<xcw06VH= zj{e8fz61fqUqjXCLzkl>Fv3F`*e}xkPaQP=+VUtoZgJCBV%5a$(!8CDD6P=&IA;0a z5zb1+LIoYyF;S`aS4!PrtyO0oW09^*FsKZyr_nK>K}&1rBP3J<V{(F|(sKkuS-#W= zXB-x3MSVGw);3Nna?rwuuBczX1{*W9D$ZA~ej6%E3e#?@*l56qpPi#h6oc^*2oDZs zgT~7qu>2B{AKt|Xcd-NoW&-n0x$VmaO*a1Np!K}jL#2U#zpNb#u>!XA*VUzlPk>Lw zSM&Fevf^j{jdRgbi*I8=h`Z=)&Pw!v_m{i>x`lh$C=AJhMLYsOUi%&iJamG-EfanO zUpuIloC4+@-x&55bx|`2NRIt>YR|U8`8-ci+zE#97i-^oQ<$u?JLR_*hO^4;zQiD7 zOQ%1eT06#G$T_lSF{+tc+yuMEjRiBoqp;B|J-hnTS#h;-q7cV;>pHJU2kF?$Zjg^T z2a#+m-y!i%lE>S3zO^W!ryeX|3i@QG+i&Dk<wq)I@di`MQ6-h(d3n&<xLoPTfe;st zPByS97&+~#W+2HI@m-KVf6m|W1p0n%iFw$HbVnC7%s#bVt_w3E-7WFH#crQJ;z~{# z=BLQ|j0$cnmMMjmxZdIfvuU1_zE@;RXoNS=u7G<#NlwG-$#13cZuiW5w-aTYeo>my zHLo_q*zbD<_6pRnkjOR$-PQ|197X6Q>(?&?rIY&!x40{E`-_B@*sssJ4}%=X);Q8q zl1X%3qFaqVZw{p|wv}gA>m1)lI<w_lb$f4_tihr;&YAs~wlE7+SmR|s_pdAOU&62z z#}P`5Hui<om5?Ufni<(liiXaY#bI@DJ*H->XOdz3naTZMqjLYnwD?#SqDEA2{sWUx z3+LiQ$D}zvJt#V&Xyl3f8%5&`>9-Bgv*cKzL?7O2Fo*8YoW7g6VdIBs;Jzlnn{sei zxz#iY9e;KQP$=NU{e`dfI9c<1YB-XT!oTq+qJcZ)EJ$=y!DkGeBK*k?rvcalbBmle zG94+K?TW0M?2H`4%{`2wzK##I((qnqZA82sw_-UFB5mR0VBGjO*@vELeU0;?*U#&b zBS0&^GQv<gS4uP!Ep_LMGrlYo>O!sqB6m<hs>*Em*vkD_)a>64#E@5G%)>v_CS%Lh z1Z;zM7`S$_Swn{+s++5$8r=3k0GK13)Ib;>ZedT`w0-4wS74f1t)RxF$SvoS+TBAY zk}MvjwetUSL4*sCeOHUf$hE9%dP5&&w`G=Jq}^{gA0U`P-?;yNKaIol%vKm`ildqF zztAFfjVfQNVwll-Gc^Lv#s6Z6$nF$Y!VENI2z`#ff0#}CnEUk;b{N-w-N~|PBz-xU z@S-EdYTTDg_6v81ZnW^?Bp=*S7l<`Oh2~k}_;SNKsmC19Z8xZpiL#3pc{Lll#W{<= zgS9Rgs!%;~lD|cAOSa)^uXN&Gyy-gG<rv%X@4S&f{Ab5YvWwB%YdCT{56(dt&x4e3 zSkzG!1oh%3cJFMbmG%S%zLhqyNEuq1soE@mIlmVqgCsn*zFVAi*J3em0VyGy$p%`K zRdSnfrU})w{p;|RA|#-;^rTSUZQeH8B;v8aUtUSEWK=zryBi_%8!U{}ALnvuUGbxq zH&fcOm-etj&Cj*^UI0#vRMZBN7WMmn*!DqkoSZ6M-zZ*mmS|kDowYcH(+$Y>?9HdT znL@uUsiYrIGyV!>eCoYhg->ZaA7%?Wae6hLwT<|TQRQ-8I&k9+p6VaGciy*k?apt} z@q4*t67qI^L2<Ib-Lq|ovU^xA7=zy)Mk_Bc>i5Au1s3LMdRLqz42;QHUl{~;oZYbj za8`IU)~lFtX6&cgPlHD6m#-ioQEsv;e@Sk8$46-|xyzTWdh{Oxw3Q4{8JhPYJlVcP zHQ^vS9cDLZ==6^kY@T}xF4D9mNlQfpOu{+qVYO3E<P68NLiVk&-)mSQ)`)L&Ik68t zb)vL2r7RT#<CUlJdgOZ7_KvmG<dOcN9$botY;xd2$`4QtYJ^p9LjbmNm=}71W3PAM z;_=4>&>7n`KGC4gtyd+_daem%@4x{$s6F0GP%dd;IhXXkm%T*LvtX<N;uMHhe~`Bt znke&9Sfs(2V;bsax-4KT30MbX9ZrqC68}rbWFhhyae(gpvCH^c785sIeuNxyFXv6& zy3$qgNe{>;1w7d_3CmN8k}fq=QLktnL_D?T*e&}s*j4UN92@==*jA4orGbOk2im74 zvy04K1I2(ya^ttxF^SCrN_-Kn0ZB!2g{k$Su>+BMhMY#*Pp6KcB6lX+1wliR_YJ49 zIM#{c1iKP`E+g|`2nPJ4@I;b7ddGM{m!W846z}J<-ajRnQE>(uba}+l)?lfOgFCx* zC}o_yS~1(sCwfR>F_mE^BsYi^9tJ{K`7bzCPHB^HYc)OqXatJ(EG`RllA?4ZFiv5m z+r;Y|(mQ(VHa_*rH0aS%qQ4^VTVqf%t)wTpI$2nx-eSW=oOHI*iN-seU)83k?9q*d z27LV2q$tr!e1kauf%+%`3HVf)sXB7wdI%aBObJ(3Ow#jBi&1T3FClI!CP{xGOT@Ix z_p2dJGU~UYwuiI!Io)2QWwP<r{!J=*MRegmQWn(*0<*S$$2}Y>Xv<xsXY*zB`-wUn z&azw8=-tZS8)(L5GRL<Ddgwln_*?V!`1<8sIqab-<>lhNo!hCks#!;ERcq6j3P7*H zDJISWdD%&K8PYp)xyJrDAc^XB1oS<$q$4IbQGQg*DlinJuAv8~WJ&f>rm8(VqVR3~ zYA*Br5)Z#NZ@2eBsY)uMe&a?d_kB<oZ4o4)!R16W^3_K6g|&n6r%Z4rE+E#V4QqJz zrSS2wiRh<~VEL=8o~O>(G3tz!PvcI4G5Ywi4l}`wDz$Jtfdi=w)W4tQ<Q8TK;I@`; z#OW6Pvk8)3>*0~Kj~V{u1&Fq<HPo&v$(pq8#thG=^7QqAl^+HzA0bU}Zt{NieV*4y zALIX-a>xgo$WBm{UQgVoCZ`^-;FY(>Xqf4LqKLhb`zD&)38s#`#kaOLsGs|>)VxO| zRC@uuE9-MoP@XY_5wvvIx}WV1WL%f7zz*zE0}PgHe-5FP1#YKREYcDTiR!H&ij7K+ z2q`ls7M&OwtEksuXRf_)Z|dO`BPQRc!x2hw7)ro!QHLBIU*CEAtRTSQ%fPPN(C{|{ zs2Xi#UH#2Sjzm;<gkb)I6yZR@jGwt&0vlXk(d(A@r`;Zcp&zo8+74}c?^h!WR>bMA z1lUjRG<T*oSp4J~+9fm;!XgzXkMco#k{U<61BsN?_p*)YKf-E7t-Zy<-bNZ&5Jq+A zjIIedA8yphHu6Fm;J(=tW$>j@LmJ^;KU>xJj};=i26ud4<HxMce~3aIAE#JKnXsFP zl4I}ArHngCrEXljDI_6?z=P`MdkXNiSqt-N!jK$?g$K5FKR}gEzYHx4OBhYU5HE6C zbd|3Ouv+$v+wZ5>_hnsTl|p@YZR9TPh9+Wyk30&uhVsh=WR*V)S9T?<cKGXh&FKjz z>YJyC79<_sDEzxe;Pn@zFHtMK(5D^zN<lf;yf;Q>Oe>w9?<+cRc(>6O=jWz;q6ay* zh*5dJQW@q8P73G!{pkoe(lu&bP?pf}7jUG9P=UuF^LS1==4uH*PfKW3@3?ZdoSS0^ z6}n4NQX8TAng@H-#bk@Xc9`}%k7LQPdKmFn`$rJUg06agyV|sT6TAVk##j=QlcGKP z$}0|H7SyEc$}T!$DxCMsJms#;!1u2Cg4D)JO`g5EH(r)!JW~gWQ}(P5Vxg2MgUlj} zku-48q`#Yo#n|2E(xr$mx;`%a1-}!F*F>eLFP!H7!k0)=eSbPCdBZqNk*aqPj(XOz zMgz&s%d(Cs>SNeD%U&jIo1V&zA?On=NfP@n#q1a3G3XbDt~Y!Iva_|jw*{7`r@?a} zX1@pMf~c66Nq04Gh^O@$LmC7cXT3R#AOC{;8POAru&3L?-35rt6B9mmoVF8|oX+~B z$UI%?Q0Y~YYgo0*Rl5z*;xdStTtTRMXz`hwf9_p)OW19w8ZrFCQ4AfIgm#-6U1fRB zr5m9Y^w5bCqLZT;Sn$}}qu}l7A>zxYIZbjoXWdgTRmgq${_+pzMLWmGkr>aWAAd$_ zG4)d9UiETg47K_xt)M`lN!rX^iZlrk-pw972ZmGz3qD>5vbun0AFi*ag|P^3yRdaW zSUJK(X7c)gECzpON}(M&wb}3S@8FW}aYfrx7XZsS9_N+JW9-c^nyOH(Y`eqNInB=x z+cAx5%Ey%JHE1<^Ac|f&9$e??ZuCho`QV;L>3Nyd{aLxIn*H$B@AF1XJF7-D_J&^4 zUG<WMUjB+R+7_|h7%(N32T@m=4uA%@fKWGWHRb&HkXc(G%I+V@nvnm28!t~sQ+maI zYha@pd;hbiqU52z+W`N!(j!>L+-IlGMk~;UpJi_BbzQ?-sA;q#xvqXAuQknay~HuJ z{}cDn#92Wf%aMbz3)|GuWn!f}2aIaIEo0<6RO0KOyCZ9QusP<AIBT0784pYx8sAyg zoAYeu8Ah9@$X&zD@LC6^JztDo07nY3L?w>&Z#3!=-T?d$?6?IN>NC@#;?Fxh4J9LG zulkz8#L=HEnfZ-zm!jLkvp6L8G8;z>Sum&o>86O?>%raPVd|TZiZ{grML}YtnKA-s zuoG`e95tq%6cd%HMht2kRJu|8>KWLgqq;+2BHU0UqImH2z|G%it95~;_bTVtQ?^_J zrVDaaUS6WF<L)}ic5Bn<T1iLx2ccg-H1NI!1?&!Z=>36&74t&ca(~U_3yYF9y@La{ zoOn)UXOEbesAX~937#m#JNcmVEOYbW;}G&!>L-1}6rx`$F&T^68}_{K?Z*ytLbE;B zOW0Ln8-EPDqr#NR`H0X^!tYReUM|sKwzSHA{`b|kAYL${yOKvnDzd?l(N-T8kYm$0 z#5aH_|9(%E*F=X){BxG-Ihzr&rRI5YibK9dNE#f)7VK^GP)p|3PUVy`!81u{N!1K4 ztwNxN@?rTa56gyr&sF<wss|cqKHxT$nAIy%>)nX&_wi`^hWq?;6f9LxeDTaYe<Gzh ziyGrK6XgRd%`Hkd>$@Q_82<LkNiLzntJ(U|*IGA5PBse2TM9G?>QA5CL{}$M^sf!c zDYk^1L9`#=tu;RPAZldKZ*@MRHk_s=mODiW_gU8KP$8k1Rr3B0S=<X*DS69BrrY2w zBjq8>;)5SdbsQaq3gYFaMIKAXEO6poYzN7P2c3HRLSL5^9v3F3rs7*3XeSw_N3Y6- z9JWliG{<}$;L%?eRKMGqBSgfwdU^A0l>!g<(m-|*ur^ytggPDwkuH_*@sFIVd}Xla z1>!-W&A3<-TH`@)-EDUi&v8jb|LBX_Gs}Wq#8$-4YUW>SldXCCkwtW-ruyZ~70e5x z?nklMVbKgY7INT4bn7qC-redF;(Py%8pD&s{_CJcz;gV?M+IXG4=>g(ft9qI%043L zL*K>`C|gFYSxn_wE`ewFiJRbx<iUeMFV}m4=al;H+SG{#FZmahP4E?egQO)8j(>d3 zb5(*>(MVHsjo$*ZJwh7&Cf&W@`=Tt&_fy;Oq*hvF;zG$@`1mB~o%1Z6WN-9LRIUix zMUX#iKcz)-+qAp&v%Og6%*#VVHALq}#n$B3O+}6A;R4O8)gteWQfgfHbG2N8+g3dX z6{IjiK@hqDvxLrOez`I`?iKBZZK3$(bZP`>U}32CET}y;Ua_R6dD3-lo@ZpUj^NPT zpVl@I6zs0~Ty{s%L2~Q#+i0h$Gq<@K*O+B-zaD+El#+~bjv<-yc}72~aM|lE;^3QF zRSH|2|I+Qngp_r>K;`hfCegLdfARY9|NIq#P<;6cjj)A7$8^tvN3xB_?p(Yc^689& zc<82zwK)DBC)%;9{{Q3bE1;_Cwzd_K6zPyUQqm>e4T^Lgx}>|iy9Gg7QtHs%NOyNj zcX$6A-y8pZ-|yb<8+VK|hPuxg+qKu4Ypyw;=b3Ytv{=4tMSsaEb=hy(DmIRg{HEW| zQlyXT9f4^u(KiVkzls~`m&ZLn1k5~Yx~!Od;kpIg)b4cPG*SmM9;1AojYueLH!!9{ zn$|87>JXT2OupH^m@wj1Dr1UY`q|g#Cd-_q;CSyn5cRWFHs4@k#cslZl*)UD%6dLo zNK3N(q2{xY|11XD?G9>nE*+HxCw0l5J6A~5r&Vga3UUA1Z?|*F)X)hkEkBUXR$gXK ztGM}rF)3IULvHRj#NgFj6RgXZR9>NW3@hsyHCM~%TRd+=3TJO1#)0SMrHoBl8EPk3 z2|1k}v_@q$(zw*h>z<qr<1N(gESZUKnJ-;1B1G{!S8XdmU9x!G!VN%ZrR=`mK3k@Z z-=6XWqXaeAhw0p~u7&HUeyq?YPuI<mQ>nXQ)Szvek2UoyqOt?W3n{y4TsbE7Zpkqv z8&%Iyl77EMT`}<C7SYToT-oSqSP}c40ckao`ymS>%%L0AItjeT@$6U))p3$<*!Yfu zUlhD%!!1ahV}-}|Os7e1Pe!yQ|Ktu#6YS?tk3BCqRXm4?Q()r9ia6OBGwy`AbLo2Z zrIVFBSa(ZWk8>GlmZ*4V^jOkz(NrN~zztSM=WGn>aL*qeo1g@`DoubkQ}AcP0<f8< z>XMUwbjmEi_YXSeLOBNSj0>`uPU-%9s~hU`;oa++l1h+|;v5IQ7jGaVI`?gA8z)K0 zka7o={|p2jK&Dt<CBaqRtCd65ReCr)_vOMv0;v?76}sZ~iA^9IH*P>jKdc#oZ1*oo zU@5$;YA@tHlvrEx+h%+Ciq@T%(zRCW!!y0Ew;7^M#Wn>BHJ6t?c6A25k1U4vZ<*>5 zrU^UaD{7sH;J-Zk*AKr4TAFqx@j#h1u1L#HXDN%TI27qGA1?>_ZV4KF2WlM>%BDs| zNBjmUZCf>rw1fqjN2tY9m^v5J1(>swSFe}G<hXB?8%61%%JR1;s}$MkY^snaA|YLs z8+7)wAJ~1i?TS@3SVC*PVMpBh^H%aM*o-B3>In*K^}5c7$_mssS}|$p&rjZKp~Q7p zNLTk5pg8V8PP^f$&YM-744H82SsF1|tw$p;J%t6b+e^Q_D6cusaLFQz##xy6lA>p| z)_>v7H4quX$|_i0yY;aK=*@+D`z(gUd#IA6KnZ<3_?K^l^bzaD0F@G@u+ZUvp0y`C z^3)!VKGWQ8`#Z1Y54tVV<#8~_zuI`PVgdG`0DkFWBS+M4@nCi9&_XZXs-nUMze0eN zo>@~_!)jqraaL;grDsUm?L=+hk?3-eG<-|0-WA5)x9@xH7mZ4>^HA~1_;~TnKUt+m zBD7}Mskp20OS_#1F?2I#P`AbFD^If~=2soKLs|)hq)^+gDp4zaQe&sv+v5cr=!&%! zM{9RPOPnYJ8eWZo*X5HQd#8ub@{~9}YQT05ZbQV>f)!(LZ$_~`(ip^TpA16a#}9+% zh6*EwY{0NJ-;+|hWX8IQ-|6LVIT%9~URJkk+mb9;((vw;@0h$T6>*Nw`Z+uTz4MX` zQAyt~y3SckWeOgI4D+Rp^Kz*dR%na;6t-bRwE)4CT<PVVdO20$WT<1IbPC*ZJ9g-n zj5Nxz8>fE^-}Qo+;Vwqe7iVSJT1=&sNhuE-+OFFOlz=8x;oHW1`=YRnb#JLIWC?o^ zH>IhYkiSLFrQpd!bn|H2{bWmWCJ2@lRJCh`%ZJ5KShl}&AEM@Z?DDUk6>zlP;-vg7 zCS<DmFDiq5CXhaxImAML;7{c5y0)~=;Lu_j&u>jSHkifUpd@t|Cn?J7&p`JTw|G{+ z1g_Z5xL7auzY>@d#g3&<8l=%Jv)aoR&|WKvO5>p#7q8J7rQHv3*)ikUNmUdsYTXF2 zSvy{1@HpM&y&pLn{r<K`Udb*GJr2jc{mi&3DReepky3(NC9=wRbI_O#8mU!s;hq0H zO!siAMf$zRdF}hA1@3^3Q&)xM4++qa+fM6!JB;fWp6e<CQ%Z&GvkA5j2m-_AvW%m9 z7LA_jolz+!u@iln(|7j`1#CxGq&yevtU$z})Y~P`KjkUQopCCUF5vfOxboMW=DosR z@zgE*bv<1`4?gCCcaNo1S{~;TKV^E&1^bRYmohwzJoFBzl0==|-hRC~g?dk1gjnaG zG?f~#!z^6*E!JNmbD=An5@_hn_ehI-1pbm5`U_uuBSk_Qt1{NJgaY;3pP_LiN%g~k zY!GC}jTL8>vRvz&G$s)sWrIIbio<HdrLywyL43DF0g(h<zc!^nGREI64W<G};_sSW zMq;FSZN!|(hX{pt%i%wv=F*!-b?Dlpuy*mgAgsVT9a!#*0=jdY(TyLYpgZIHrFB?w z?{=)06)`_$7Ksn0Vl{a^N~;}FI0~4am$Qmkt&Q1kxqsHTB6cP7_T{VM(D*sUV%jvp znO+h5w#FGcbW^dVaWAmKK<4uur57*foLHlv!Q$5hK7ZJ6KU(w0W_y&2)}59{B4;F~ z#A8ja<xO1}Q+P8xf?nb9hMf~LRNB9-t;{{ZT5%Z;Y$%+!jW}54C0`n|)4UuUH1W7( z=*;S3rzic>DgPWT_X8A0fl`(Vt5hZhc!9mjK>DK>^cuX87N_CZM;h9``-=nD*4)}p zwUae(4m`ffc>1Lj4(AlX?|WX#-(_+5%+9Ks)sAH~I-0d+`{0NQLX(owP;qYzlQy|G z!aD~SQ}EkOe{gantX?rW??^HxZN8Rz?Vw28I(I@aS~+2*P~%c>hLv!JCih8ewYAwT zDA*P~o{?im_F&nkq%%}o(Sd2+;#8{s+MdgIJQnY&TmtrB-p5K~Q8hr^h>(@C0?*sV zBNJ0N_G1Z^eBoeBicE)S!H3=Mxi-;67ioyNP%K*NTK?=7^#x|fdc?0YK_qK=$<3T- z!9u_UXPqeUNcv@9)(_w7!lv`otrjZt(v_4p`)RlIxh1;lk_{+A`3$Fj>@VuiyngJL zxYXYL>Wk*vv5dy%fT*h}o46_TeboLz?F<4!H+D^KOlS$Wlmp+~K=E?1dADDM1>=<9 zmws^I{Tly*tkavEF=@e_r@h;Uz>YYm3{gqQD5QEdr<8)Yl4x8hiLB*kcD+)xc7Kqr zI`v3RG#4HHa;F>uwm}X9BV$;ebLjEAleybBO^$UhP+1n_#8?b8O@;eD;t>^q%qhuC zj8^?ak$Y%BdFX;kZrUq7hkKo0j?&xZ(AX?`p4FnO9U!GsDbHv+&`?joV5r5Y)dw%2 zY1r{Oy7cK(4xvI0VWZkO9X0mEsCh%f()0o?tTraUhS$RuQX||p8Vn4ClQVEF$zs3| zLPSr!n#5*zF27Ur_ua^&xSvtNcFP{4(DxF7?bRP|23WQ(30ea!R|2OU^rV!@+}=m* zyP_xdHFjX^ZaUYb!h)cvj0c}rfIhO{e8>83rP`vcNa7+~^ZkllOh;1yij@CfKQgt@ z6yQSjIkTW|vL$sy{rytW&){oF(;&<{CqVsBA2~SOE>drAQ`YZQ?2H-iLACb8MMqVe zsE<`vA@=-A=uLMEY8ZYvQNdCm^E{`mK0@Yw;K)}iSpkR@Ha-1mqZ#+7&`%9t=J<US z>Gy0u@R<2+OUSk!($1<=9)FAof4m=BK7aqfeV4tbYc}LT73Mi~X^mP;_OjBU6>}_? zjA-1JzD_n(LB}?>=}|UJ9apSC>V66c<Sr&ic()m=Og%R`K?TAn7Kub~SoeMM#9Qn< zK8uYyiV6lJ6hG>2&M06s4+M1A+hPzxM5<b0(X}dZO)d6JzSRd^o}-W;R!_KV%SyGF zw4sJQu2Kh0)`|Os`zZbp^(+7hHM<c?zP{|$)cQ$o2@<}Gk(pEOq7OAwI!%wCR4o4( zc3{b$GcZk8OKZ^yaVk`*c%7qHL`Il(@6}q++DP79j*h(DRVR!nNoP$0Mxv;qC_H)J zY0kOlad0-trq;5fTpiLC=K4NjejE8l4Kat{bNO_|31*Ik6|r+R5)y27zZ%xhL`CN> zN?-EbKIC$_G!|ixmHUUp0zqtnnEDDc(%9?nEBR;cXY{Z~-yW6yv{~Sa1ey+yFyc-% z4MBztfI-Lrq1^WyrH{4|=z2*%sm2@=Ou0KO9)h4hc>U`qO%7hBL^bc*%-j78ZF^sw z#09{SS&8sFwqM&I^i(J;hz~F|wfUnDY;mjIkzXeHp<yarMy}4f`s)ooU!#i2{-O#N z6y3A7hnD6+6}9-(91RVb4I#0}_cJjbLQ1=SX@35CosR{xdM74CO|b)^T$L5A^|}1! zF%Y~NWXib3oB1n#j%sRv?zySx$ho_PHJWy8xN=0kr>f5_9#&;Dk7YNQ=l)Qj>93d~ zqvH${cxc>GQigh!qh{2sWxh|<NzTz?g5F6dtt)Nb)TsM|cJ5~Z0euyw5}7}l#hr*b zc*cFM7y%-1T_1>3WdRNG9#C{PWP%VTHogz3g5}g9N{JdWou8H@S31?vJm!$@u~(HZ zJa4K~RWM)lldR1Ty5V#2z{CipQY^`b_$73Xm(Pvl_vr287hOj7v6snXhJTYRnT<F$ z6$-+VI%`T1xtT?i%X|6tD{4N9^ZSsJ4obM$CK1($wEJ4n%E*y>ZeeLRK`ioEyLjF= z%tN_&_If|DRsXMW&(tN;?8WA-&0H-)-Ru}@PvEl08mYxN4GnK)?rYvj+u0wYNV$~; zMG)*n_D8(EU|_4ybBJsF-X5(ZyEYzNeB5$5_jYR6OE+{>n5}d!?^A@}`*J)d6kqtE zQb-9xsttIvNG&+N{Db=m(YJ?e0?COTjXhp0cq(Kg!j_e59KqUmTOuoxB%$$P>yPBF z#wf_V^LiT3C*l3Vo+7tq+h@qf8LM~I?6SFobR2v=YmY^X`&R?@9h1)+4~+=hR<3#S zrNxWN$63wK5Fjl>9A2!Oy8eneKf4~u|8g=~5%ag?qZ2)NrU5Pp34`8J3W~Hu6bL(5 z>5wuXmfIHD0wpvT`<lQGvos@wup2ek`(-8s-`)+|c;Xq5n&omKD3KKOJ&x;?%RAm3 zK?UI9T08w9PHb;mP?wwX;~Cl$xc#0pGA{EK`;f{Lh$|nwr5sr=N^~}iS7#<IW=%l6 z3N3PAr>(fJskoA)*7#*%8VePQ?6X!YJuVeJ3KXN})3xYF@z<UgE7l5pljLJu3kDc; zk-DdsT(-@Sn5#ARstHY#)tJo(E!_5vK$bwPx>9%Vs=%d~g=%}<7L2TWg|pnWI}Opj zw-sbYEjupp5W&EAjJGZV{oe%M$@^1P3f8QmcDx^Hk6pM+QNA0LFQ~(F`HZY9UAekF z`A*m*WP<gp;m(NFTP=}BU0vB92ul8Lk~dq%8ZY_3_U^yuRjug^FE*ie<WwS^+{mz? zW)?-^xnh2}$m0oOHOar7RmxT5%DSeYx>@AzynuirD3>BQ2>2{|CCg|n;*-=NkgHq; zkp;C#R^*BA=cPy=o)9%`B`m@X1J{=Phc-fEK04s-*QFxHkx9pIM?93F>gVt8unS<G zj<N-bl0;f1dGj}|cL@%Di1J-0uUrUCTheL>k<142u^q5QR#au1kaxM?c%IZoHf=uB zT=B13Qbx~RLUjb61~S+fTmM*ToN&ccUhOd~s^UHDyN&SZH>gADaeo!lG0)GE7|9XI zoQ6HNEhwU`y__;&v^V)Ms3uYBQ5JaXd`uMBAbHDZ%(0O?EjGn4n&DBndY+Op14~M{ z^s>hZrkLn2)|RXO6o(a=vkLbCaTtn$0XYzd&7*C7?>rgN$WI%&6)n6dEn;OE2hE25 zsG#2>V?}!{xiaVTRy3nEAH3Xwo8HtKTZ;B|Ow^|-THd4q^ZfQx5&5Rk@vvGsm>UOZ z<!}4C%QTUQoJ7HLU%y-kaBF6@h1!+yBysPQS;sLLfB8n9*P<`Z@*vw_D)!RtP*=>v zBAt0q)F))2n|~nmE)t_Mi(dMMp+A-KbI&cXPL?8wn~IdT2jPw2AE{?#hu&jlM)|zE z`pn{OJZ-b(?rM5LD((wS{)YpifR}XOSl+Ta!A&Xwim#k=AvX!HCC}}`b33gK%4>cC z76!nHL-NU}aIK&LF(^#*P%5PoDtyU8ILuW(K{aCfE0#xe!Ks|`El*)ZFg5l^r4pvb zR79<bPQ%SeB5~9L6V-eO7KNL_TP3i@_qJc&24@9uJR(YD5$5$(?8q3m)QN!%k5PVJ zLkD!U_whUn{vTRcV$|zP-?(SM4fnYnFa%U6QrdDf&Deg@&$@O8%&N9I^!V)<!KJBe z4omX2y!qz+Gr&JJh5Agq+K}oTxl^@nqzr)!P$$FI7)(TL3KlgepYpDlK+$ro$bq6& zPrjUx^WEa`zy3w0xs{(pr(KednkfA%tY#;G!84Cwr<d%~x@B^~H(+-@oSd(g)75Pm z;qZ`45a-4Ob^kKoG5XF+?UH+)r!@k`Zb!GNI$n1{5Bc(RMF^91b8D)lOxNL_v-{+Q zi?rLCd$ckT75xeSP#}DcphP|N4liE>19;!GZFxBmTa7|P>-5D!zkXnk@H1Z@qPT%= z#W^5k#(Y&bH{Q*rpjncSFIk64OJ2x{BX|gErXif7A_Lz`%f>7EC&YFIB^?^j_ouL- z&GOX+qzlFdnV|*y76#2Bka}(H-orf>b%F1*>HLN#V#<x=Z{I&uwQs}*DdqabPs>Ku z$m@gi!UdNFUdLJsy(qsr=?J1K8r0sHwy1bTGwtHCCBw&AbY>)sk=Vy$CKsbMo>MjT z1If<Az#+MqpB4kJ4J3-tMFh3oBW1S4MMWSoE*sWkc{`Fda>5QeCHMouQ>H!tjN+^$ z>K2VzkWmCG$F4__tzVsggu8jP$JIdc2hnI-8IrhEtoHe)x}eq;1z6T!j0t_cYCHW& z-n=Iq`Oc!QDKf0tHAtrgQE6&RJr)r~HcW%C>-(%*#c%|Y28*a<tZ3YG3eVb4_1A30 zaKtTWr!g`baCs1im5+J{(B}3V;=v-AG+@kCmNMi1yDGet1$aG8MQou**B4tR3J^EU z<Z_Ibd?oPOQB+XU6+S0tIDI`LC?i1;j6|dmC)i6FIW{AeTUV46C->nljqupny4^wN zB<W%0cvYNkv=Ni`(5Uz{oi^xg9sMg(^!WD`0(2okm^x8_#UrXdFFJP@EJerRnvunT z5Qq9Z5(?{8_gtO7Pvr_H(kU?HJ#0Hz=+a3dn6giQH2ermc9>0;7yk)9GH?_(&Qf{V z<hZjJFZX{p<~w`>@c`^vS>6y&_OW0DuWryY^r3a+SR8Y0o6yW%j$Yx+ejwkp=0PuN z+zDUalf@^3;5rmbY9jMkfAf0ioBwCJUs|C1f#){vwzU_1_o9xfFkfyNwp1XIdf_0Q zD-!U_yVd;m<X=mUTebqh$TYY&jJL+v#Ey9!`#%J@udE`!a5;riPI~;t1q%A}^2*P1 zJtuXN3j#S{Z`i3$2k9Ixka3);vN9@AYh6}W@%^1&{&@?0;a`7(0By|6iBv^ffPKfr z^$~yoy}i;$d(Yp55$?7uGj$>r$rONe4{DhHt_AoVSXWXI(o=AcdHxZ$VfoXY`Wih5 zMD`e%!Ih4!vR4*6y`ud55)$IIar0{N(O(lTb~lk&!O8L25T9IT2$^@mRCsV5oy3D| zxpy%fsp!q{=}B%WU+w0_%C(qaEtRG@vYlZ4dJH-P^BwF4FRtj)oNqiMCJ4@lA3`!> zb}#B`R@So-HzOLoCYpXw`r1cP<R}ZBjo5c>=6S=o<>VzCr&MH`qa}`F2y#4u<F?M% z)^H=zB{o{FTB@RrY%AjzOngk3D}E?=IITZzCBYmjv$755>of*kU!W5D;Lq&a8EFtc z0$k7g`OxWm5r0U6OcmP7*9vXLsP$kmqEDAgy1wJSsYRGARKk3XDV_6q7I*z`anSD- zbk3QW@#DL>^iZC>daOuE9n2;bKZ*#BZrD+J@FvchX35S{!;0be=*S=SO-XHmhnLG& zJ#S8t<^4h`w|m&D4kZhqw?cwM-rJ_F&L4IZ3EG>4s>>v6*&Kb72ZPo5Pi|75&j%-V z3r*WwBC)PVAYwhl5Q8UzqhcaUaYt<ANO(uqlq3zY7-#ZB=q>29tsF^QB-#_wr{OxK zJ3_kLlY)ek7L&TJnrOj^_??y>3xTroQ8^3-9g!)YH^~B5yFOWjUOZHf#c!KWGR0`3 zCnyXxrU;A%$Zkc^;d9J-r!og9O~Ul9j*jsdd5qrq^3vOuOAs2fPQpH<Bm1V}bx8b; z5vu8J-z0UuCRB^rbcwg!Pn@%UP)nwOdmnrJ_~O3wvNIB@A-FGj!@b!SY>3`-(N>fF zzVq$lWPxt|`2+(~_q?M2yvffoc;t5qpYMCB?Q2sx_|y65raWp>w>y6F!`L3;zu%a^ z0`>|Sm}Q`k`o=wQhAV)#J(Ym9A(gUIW<u&4NVO+IWK*_r1=X|8|KfI{S>q`@S3kAr zUVDKuQ>!`!z3GU({@u2JC3laDt0M=`@s@+UZ!YxzdRi30#l!K~CW#u87JF9P<Zzjq zpyn%4Kc{+h;R+sEK-x;4;OqBnp-L-ud;U3Y<ETdrv@%xw_~NJ5uj0pdAx59jiK+9s zDkaf;Ci-n)6emPR)Gu7nKD{}=bes>L-S?4ck&_^)X4JvJprB#;pjGdEXaN~oXn0vU zmv09Zy!L?!S2Mm(Yna=o<CGD@M2zAwMng)6GDXxx2R>m(RrtXasmcsF-K66)t759z zy@=-?!xxd86MQ<FEN^pE?uv3OHc`TH<+i8=ig8|L(TY(k=&ztl6DkMFy|Qj~t=4cg zktFjOO<$_;n)U*lFWAdJci@$Hrui{KD4Z;^qwccVvk#ld!*DA(B_cFGP9U8>qz)LA z8p|_ke*P9Mf@i+yV^x@q0g<tmJ&b^WQs?26kX9N5DQvcy*8>vc21JpYRall-Pshw) z@=V#%x;tX{VE9-<TRd)oByWRMozYJvI6kM5yiA3kDSNVAT_43dNl}G4Bq9ZZt|p;M zxCfKEf!Tb5v4FZ%tNtlvwJ4{gBt}5d96H@xFyaeK-XINvzcLAyVvV+<0NOTT*Yr>( zobjj{B!<G(9x8JRBm#&m?-WC{6$@}30PL&-u_nI!Sc<#iwE0&n;@pT!CwKyF24iE8 z>}a|94$nsA$UTyH_D+bI1%t1k_fi1g@+LFUcFf~l_>WyStJPi7(OdywPfeH6hT#ri zm|w-Wci`)}-#KlYj|8K|4$?@btv|3viUo^Vt<7^ZocML4bT9V*>SXih*p?!yrgQp) zm3ORsoO$0iNe-&{rF14>c#MM55+%(iV%b6uP)$=W{Sz>1)JjZ?<Q8~n83><Q)KhpJ zI!Bza)0fT_CCut=+6oc**VcxDRf`18SB0i4x1l(zt23OwdClWWxn-R;99q8K{rpDx zI$xk5p?&KC#!d<=b)_$HqGDtNRQm&sHaBvJ-EnLi0sCQ18Fb(KocYXpCA1^9w_I-5 za=ojL9U%Kz4(<FLU(KE;TKXuGiR195<sMxUtT=VAYrV-T!k8j)ob*G@pX5wUIa&fj zeOvRCVYP(jv5)=tk^b}Z1lLI#xss79ErH0`n`!n;n>c)M1MBp!5BKn=&;WevCFp_g zuO}24I&eZo7nVPt1x_d!hWGU!ph#t)p8xP!IApN0!Zzv8{}AjrNE)?eE^=4hxx*s> zr(~OyxtTMvM1$XDvQ;YQY>6=446C#LND2+<VJeKz=hElinefXdR{Dc_Q(}r;ikG39 zc(6!AtWU1{YU(TZu>!ep$b_}!5?SYAz`^f4kq__olUdfBb7TUJgzNnTw5mgUDDiV_ zJb&uyC=|=}BJ-`E(}znxzjMOd2NM_F-?`(@FJwZblIkM^B|{X^&nfrqO?~GL(h>RO zBYy5bBpl@0J3bdVdMvkgQ}RS3;7U$m=HUwRjZB(0`tclsm#Pl`%*H$-ZFLW4(Mep( zc_7&kD^FTeWR6!46IAR`ci~nK8aov46iUiWbU$}QX6#p~A$IZ-?jIWhB9sIkZK_-} zcZlu=mBzdcyFsNsbf}>o+`0`)Fp0_lObqN(Y<BfEr=poH^1)qaK@7X9ls&0c_%d?X zAUd+pg+}#-&jh~OkJ)*(1tU+=g6nQEA$N}8ymrgs%M*&kn4OCzIHl)f2*rtA22Z%g z)$x2Y#gx<~3&+OROkZYvT_%C+!N6uD(}LQ_NrcPThNeW*oPV}z!X4!!-q`hw{=?_o z&TIwl+jA}L-1aIQXvpuhvKlK)oRo#*`RONFzY5SP`@NJ3IzcFjN3YX+|AQR5+I3HA z60m)eV{VQ(zKKAjX!6#$<o)Aq{3Zq41#Uepp1B;*Zpa+Vwkv;xTjomankD&y)#kLx zlcS(KT>YXg9l?g~qDJLYe4z?0uK69i-ft?~tgh4Hp!NVE?qN+Dbl>yb?*6C*;8#KJ zrdTAfB-i<ste!TtD;>91x>^T?@OKymH!EE09!tv`1isO(_Zdj$->jF`!7(=0rDz3L znHXr&lO()_Kv&2_+xZSzGRJM+VP8KD?&Ef`UYUmf0k#u-g6+}+W+(;#*e(;Ccn`pK z6v6yLTrQrA-WS<HMRjt^-)GiIH+Zjk7Av@Y2;oFa66Y@X_qOoZEBHdXSyv5QH+o<3 zdNjkP<Zv>0LKghB?U`_2KkG%c%+ZuPFrQ!SQP=uuXehNZp$DH7ZdHwkj#_cq=o8@{ znaGPi^C}vfuk-LWGKp|E@5qSL4!Zab#Mgcq6Ov(Y<7)=9-IuC!mZCfo#}E>#aV`Fd zuT#rX>`c>pXaK`t5MOMlFSA4MRNVq&W0r_$k*Z30-}QEEx>7?cnAI^{uJmHm5Xb#d z@+_qk1;uGP3#{0ZKT6NW3iienxK(Ssy3HXJobIh2dc8WJ8Gf(MA-b%~^jQ6-TzulE zsqId@J&H31VX63WPop-=lJ<J{uf<G)AXX!40!WHA{?d*;;ho(8yppX(Wn|!WtsxE% zJs8gQ{sPzw5>ho8Z`9Ekhs=1x@$m&8Po*<IhINEYr$uj2rK>7ljJ_pwtLajb$i}X6 zW-pudU2p@in_l^y#NqQ%>Z@(^B_Z?h9{e1oPKm*=l{NaCJ+?JvCaj*IebV0)MZde` zM%{-{8+DgszV|)Q*&Csrj;XNI(z)rIq6`<OIbqKGHfX`<^y!Cd{k`$<9WKY6q5DAx zC{&NskzgrZ(eNk&tp&mQ1Z_og@z0+0n%DI>ge*x(HXJc+cY7|HXdS*PG|6V7tEPw) zd9<|T46Xp5(V_V}924#9L9^8ua2s!8OHH+WfBU8Qr_q@t{?v5$<ZMwbrQ=u30<6;r z5+1&eF|L7*salTKxa6TOZn0X$kEL@VE^q`nT}QoNQSXhRdexmdyuCfQ#tMq(i<VD@ z>{t$O0U|hO^Wat|*N2-gXajTxCzc*pXTW0Y{9D%WHY0+*kbkK*^|i7SkhkA#E!Bs_ z61u3~QVOo#xgBr4zRx4+b&pMUF)(`;Sdad}7<^3&9=J?bDAM;>igIlp4PD$kJ@jk8 zqCcghS+cy;lN~(F+~S*xyf9d9%bruoG7z)At8BxeU8C8x8Wa%XlES}t<!=0>1<%_h zwQ(PbRYuNhqqL&<Xa0j9D)u9w!|AQ)3oyof3Bl_e-=l#4;$;a<97Ltq6mxse5gxkQ zA!)lrxO^=tP(|yPJ(-eQTi$R_7ee|FcGdykUsJ@8sRLDf`GxVrF-OK1p^Yg4b#ws6 zbFh$q1*0II<g;aX{9V%=CCie_yx;gvK2MaDl2Wb``pxH8a6es;WZM-m$2*Tk<Zw*x zn3W4n#ZjcX7r8!o#+eHlPtABfE91PUb}ym||5)pxanrD(7dF}+8GXvwnSrLBORzc> zfT9Rl&FNH=X<iCkg~Vb_u;>g8;?7ehG+(p5t~_?Aw56ao?}=oBYh6JLGrP*8(0w>P z4~@T?N7gAwEo82p3Xxuq)&rf;1zspwnW+SCVwQhDxAuUW4)3=({B&nb*m_s%;AiWj znErl^>g=Q2=WX}1xlYX~k6u_ie|wuRhp=m58`R1@*K$Sr8_Jk-YP~L5F<9V7hacwa zL5J@(C@zyTofi`m;`G^1aR18F|Adn%!NpNs1P45O33(smg!In?+==KHDfrw*`XK<C zmGwD2W*-|X<HdLAc@(3rr~^E9UIw!B%;6DZx0y!7YoCihlp%&cJbFX_AUBwyXNNS} zhSBqH9!D8=K)hyZ-YG|a<~{yFgQQ^q=-@ZO$Y$CEU?5~9Ye@h6=}#Zvk{uG-Q4;W{ z2m1Q`hqMoGT?|lH3yHq2wuHwJ!*(%TKzQKRC-Q&(KH8V%-4zr4pBR=&B5xGV*P@K} zCSZC|^EWLkGXTWClm9mn*KWz}9@;-2_+RiP{tgr%Zqbz}WyBK%#5EOMu9ANz?qps+ zjn(&kYH2Ajdv&FI1B>6HyrdXnJuMtK{MS~XqNgl>Ej_G59sRPnvzJ67u6H16C`?mO zERxXM`RP#col?*Bn&N3Kz^2d_Pb`kC!Vhc)rUypetM~rHOZfb^O&ZiIk9)sy0%QoJ zh-I#<@vj@_=}JlG(-1meRV^ld0ub(Uid&(743p!DS;SW>A=~u_CT_PQdQWT}HRxA& zEn~xpFq|r7z8+V(vBdq&n~K*o?3%rZPcyE)iUw%zl)oA^PX+w^15*Aq5&kKd=dbj^ zAA&jxWB`ThYfF$WeaqiMrQ!QeUdsod7ffV6J1>QQ0ycQKsq0091T>J5pSi$#;J{~Q z_iiLq16fgGYmz6Z>&Pu(wzKPL1%BebLvgWyUKP`WQ^w<p(g41HY{cw(BRy5(KV$b7 z3;vBWgSmi5)!?d9jiddcZLg6Sn?n3|{5cm6iio-LKzJbKy7O~1yo5D+9WhOtXn_V) z)Hj^g{GfxODSF+N)A8B;S87sFu~KP7Az*f&z=t`lReA*T`-7#U?LB<Dh@qqI9r0?= zoEQ+iMnMZk?g{MW<s45rzPJK@aZC=s!Gvi{$r|#{r~jw<0#-;5%+XY_`IPVwFidm< zT@nEL{{MgQfBkzJ>67L8Me@<b0xS9hZSC;Cz0t{2;Bw8XIz^iWOjuG}3d!Fm?9V#M z|9ssWA9%EFIEXl~#EKn5fnWau)Bek@`gh;*s{m%Kiq-EHg!yzoy#LwQ|3sbt^`9jV zz+=@tn5&QQWNBAs477Dd{k#A1KVSEv2Mp@`C5h$A(?o0b96SEEBXW4!pAKe~bZX)) zJ9W&|Tq1wppMM?xf4ss8Ed3~v($jb#A*sm!Za@An%jaG8<ko27uTiL<?#K3jwY)#s ztM)yR)!E<A)nvGSXfY8<3Jm`*?dQ1`Fh4tpqKoa+z`{31uO9xlBiaWZ%zl5`M58Lk zXTsiC$>HB@#{c#HcEHmA5GtSo#-ohM2LedZ|F|yy?pu8#!2PK(oDwNL-Ouv>v<?1h zls|9C`CE2ws;xyXzxYgqup;9D9_YUsPZKad6WC!5!OFnGyO4D){g+$g=PdAGJF}$| zb!L>nsWMuyhw*QY(7!&-zh2n_mR>v%tO$&!h{}UE`M+|BUeLXQfbS{O-ViEyy5G|O zvH|{`JM%u525xh1xf*gn^b&$;PRJVZdprPv$SjPCXeoHJ0&P%K<e)dXdP)*>fT%b2 z6vc5@5^{l6Q{7IQhe=#ZY}K%O%H_cng(7$7xNrGgi=UH}1_P`08d}iEWFa^aV3R%$ zs@uh#fAl&%zp2>0*~MHvzA2}4T}$+m-nE$;T1WmLtn)2DFhMYIan%m*0KT4y<ZmLP zVejKU%d|XIBI_4S%>`n+dD?l&S5x{GOG%!c;X_&?_lwKgAS0VgK;9*B$&$YD`WcXe z+;lipG|68WIJy36v8H(_gIBX@meQ@rMh$FSpsdlFu-7?By&X~b>M4Aa>QZu_(DLg$ z_ISz*UD|a|a>LRF`sBlzlUJIJ&6q16f}7YPOYe2e<cfOUG1gT-PZ<+v`Q`ot9(s)p zVtiQEWe)!sS0$!G7nZhqHn-(M>_e-VRI>g0tt*pnKO6SZaxroyxxk2rO8?Km0^aBQ z(|{6W2Nd*197D(xSLpV>HUSa9B8=`m$PJX5*UbbvP$(W}+YgJ1H{A9ewWuyUOzEU^ zg`>l|VvS<u<`gcHftMRTFANsf&$@3MubUr&RqAgP3_?ogcia`qEi7t%M@HLc5cQE> zdnY9hg|7oSgsM})4DQdC>jcPF^Tn+068N6{e;~=B;L~o~P2$IX*Ss$#A3NIj%Al?~ zgG_sQV_3Ob2^x|x<XU3yc<mo{uLa1_BQo@rAq3yub~`@0aSi(=_h7W_Y{1yL)X94B z0firh*d(|=nYLzTeNNQs+IeBxReK)+B){-JUz<g*lRn_slq4uW<5x0UGN4L-L3WYA zN1wv~)}y@cg3fi`;p}mAU~P_Ir;g#lm_B3f1d97u+Q9<_`5_H9rr<_2nJxb_)NHA% zK1LD<<$a9%YK;SD$jZ24y0Zisljfy4H86czSr9I*+qpP|ra9GKbSg}eRqG$B*;x*; zJciY#=5I|iqK|MqXe#M0FQYK6swt%07@t@#Ht_(yDe_?#OT28Vv>#?rf1b22UXD*L z#js23hTqFa5%l&1>&Zox9KgqT%GaQ=%KniEh|~(-d<E!{PX$P(#opndJy2KWC9_Y= zE_%??TmXw;%@*wQ(r+hxUEx=MXlyW-?XeKaAtP6_vsSD23%&ez2KM_J7d87^kFhHP zL}w4jpYUf?FdzoS<UmLLgMvJfT-<mrrSJ`Jabx;90jTHbR%iv2Ph>vura^z#b!kAG zKM}qKU!&4+uSzWQP#N58r{vglQB9BOR?YI2T!BHTa}|L#;xha9e3-m7B|bFk_n`be z9}th~tpt&<>VS}auoO|k1CvbU%Vl%L-<l1>{aZyg47|U%WwIx7PT1?t*%+`U+HjEP z?-T;hm;aj0pIR6F2VDUAA<{2PM>D~TQCRk?t7XOfx2SEye2%N>^{0y$=Z_0stmHal zxYJk91%p!V2w-$k&4AJ%<ku{#M{BtFvI3>wj`<S8uL4MLZuyXj>M+4KInOH&K+H<k z^K5?GZOBB2x>~Eght<nYKjJf7U!6YQx?fMaIX-_8>8O;JTkF%A8`k)u%zS3GD(n$< zTv@rg5U=&_hr^mFkzo|~SU|vw4j195`~7Jf1H0G_Y-OJ14$@!9&&gY;ygppwh;nA; zcA#ZTRb=dw?jqm5@NAs_ac7FY)Kj?Pw(qJ%bsk_!CY`I`VN$QeLRcJZ&+m^noaL-P zG_#NLvhv%-7|r`#8@|-)oy*a|QZJiPnbm_8E<c$90<LC!k(Hf%wiu+px^jvrAp9YN zS{wRA0-UbKcUPuQ3BfcDbZ;}Ix@-~!#NzXPfcJRRfvL`_;Y97txYxwz{VCBqlZ%#~ zS03jh+Z<%~d|kOd#e3GSl2<TZnPcFCMSpeoiT+nERaM$0q@JshAGO2Lzn~Np9TS#a zd!qwhhxCZ<`1u1mnA+Lrkw=TqF$?KMss4<uL%pWL2`4kkjp?uK0X;BxGwk(EKA=i8 z;wSIOGyQ30M*QcEQUjdj`K|_c{*h1K1@)cf?^tm6+i!a?LD!$y7iXN$PfC+xo4K29 zFI)>3Y`($CMYj&4a_S?jp7OJNmc~v$Jkpg^EC7X%ZaQofJGpjJEJ+pqY>q@gyKoI2 zO=G4cZaBa@zG;uc^+(Z<7wPq{E%M#jen#$3dJD|F{B!nH0-PvRje3etQFH#)wG|-T zXOVpCv(?1#MMB#|vxwv=M@ky4VdvH3j#fLsN`(C5AnSQK)y#S;uocBKT}vCfHbc2} z2=2`;sdjLg6YiPIqFM!^(`%pNdp{vGS8~C`aE!@p_2AR)@+G@_;&;6Cr=^WZvcimH zJg@i7c8tR~LwN2D3b(zrl4>H{kKUuX-Gpno3wt^IRK>}(*jqN|b`71gm?cx+-NIYE z(V58zpwL~GJkYBLt#B6)Ikc)x`E6B^NqlTK-^Fj)CL()yq^e+K!&cCjI3c2UKb}E; z5vuRe^&!dQmhs(ZiRIH8l}g69W6IA2D(OejUcT$7^xhWN4KI)+^>(T0mnYm_=IBVh z!q;*mWGd4@3`^4cu018#tf#xI;;}S!c-x~oux_vE4k5)enZrRL$L8o2H*F|m5IQ*4 z6xiG=+92t&&rPj5J=LV^dgc}}^*-`)3zVj<7(n+IS(LZE01$Q9>vUGm!2>B`5wO*O zHSmIuZ_ENHiQ!!WCl^B;#oBWB3BKy`ZuO+LuEWc;(-@_lHv(PT)g$M^(CH@o$T51} zW8nBV9X(oSL`2jk6)sJqVG_7K{*SP2#rC>jIetXp;bRLv&hNASCDTo2D(PAMf7b%Q z^bCnH9@!wHDQh4ona?I@Na-GY)j4Zmpb64Fzld274*mmz)tkDYGOH6h3VzbEL(xfi zge@iG+R+o*&vVPBDq{;B7Qaq!qzuDN(OY}uOZup1tOJ9tM?T^xs;OR}uYI`xH^e0o z(m$&Ss72Hku6pQxq}*`z&WhYZWD2k?8>S<~4vR-3VLJ$l>3@|okst4r`h~NriLM!L zxDvI)NTt=E6ZuuIb47EPzd?eX@AQM4z10-BT@*vj%WHk76SU$0v;FCBaCZsna^g+! z`LyyK5hc@w{++Y|`qW7xQU8*O7#Jo=PG!A0XT+K}n-D3!W4_dc8M*ro$B54nNl1Ep zt*fnL)#<2|*L9?+=<xMW&HIo6WV=MIHP`-%2zg8<(S;jfZ!IBM(ZxN%3ZgY@?)rif z)hYjDX;;*R?AP4utD#SNp>P(|G8HZNa9g7Gh$e5LTaXAi7<HDTlae=Pugzg-a6@lz z<`Q4GVDX(l`x_2+pK7fz;xgK$oc>Lo={ncpc7FmJzfe$pKS#e<utSkrCF^WQ$ehY& zCbp8Jbqrn)R}|ljnkfmlZ6U&}%ylsuran`50(vif&9t?iZPM&T-k_Rj@=tI|`X~Hv zmMAxNqHXK2+%(YZG+kcuRd#<Jiwordlx9mnfufs~E>HH_hQuj^=7fkvlyX(&l03<~ z%Ke-4x06s(Q8u=pcG>4`Z1&-&*5<@apxFUxhij2#N2Gmr>$Ah-vm(`1+_y;rCLRcF zT{mIYLf4HFw=^rC@=onb=dRUj^ipTI$qOvWIt!BnZ(}_BxFrIB_B|d~<>T>GyyIiI zdw?Ke`#SG9#joywrie+s2&gRl#zPpFER;uZtV8!L!LU7^{uHm+R{rlm`$FkUMaSS! z<r$WmzGMx90?Jc;X?o87MOR9W(^$kSrxN7Afkl7l>%|O)NWNp9@sL_K3!Ov(xp%4d z^>mlk?qt5rPLh<nuyKblRaHOD&VLm(HYENf?*L+cz#-0JP5&Co0o2%B&+4V2NVO&T zr_FZopkJRcr;B2U>>PX%aVbL{aE0}rh7U{G;}@RhW94Qj_gXf@vvwLC#35>zidg>4 z?L#%U`68s7?phY4no3ZG>F57>E>2QsXPSYPU|USSi2mJ5cWidOQI6cp%4*Exr9{N% zDQuk?TaTOaTPFRXzwjSF8w^)hzU(5PA6I`{%82S>@yZit+V_h!&=Kup57U4VI|KOy z0^dtW@RZ!NGxN^;;2EF<wQNZ%4C3@5+3Y;(MJHmn=W=z2IRpW;Tb`#YN<q_P;GxF_ z%*FV2>Yh>wuDd%L`D<p5({2^2(D5tC)rdzZBiT*Q;?Pm!7@D5e8?|N&p<OTkAeGif z^-uykv76e37~nONHyv?Xv*~5c%wacy$e$EKd4YmKdWVG{C4YlCt#P2pEEVd5M4}nT z3OX=3MD^R>_-tjJYc&N%Z6<HV?XAmJxHqHAV{O<*%<UlKMQER_YBDQAJcodUqWO7B z)oEIfP)8HtP=?UELCVvEbXNQ-^e$HXmMgv{AEQFO7@?cfOKU5~$nT#hd1>y=-qthw zUTRf^lxApGV#?chI*&=Hlc$jI=Lzm4+fIi&HI`)FnTIv;hRf6M*>oQw@N{cuJ5sAI zj-GwMkq!r0wA7}G$*!((zW0Cw=_OEPL=({SZoW*o)@jEEbzFIz+rlHtrb%$4x^I@> zpxQCBlP#){4ppQtdnuCk&9RR1M3km}T9XuyV3-M9uCME(2D|U0G(GfuwA-^fu-r*q z6rN-18sNh~zt6bjvcox1WopTfY|490zFk97&l;70-0_Q)w)a)~>KVJsWkAZ5fs%8U z#4S`}ajeCsQza$O=+#MM?^V->{WFI3M}3^lgVjtv<qrk^d+braz!y&H;;+{yztb&# zBpvErr||BV1XQ4IyUxrU8$X<V4T`0HO&HEHn3ZP7mFD@GuF+XD6^)hqvR~C`3?}>W z9n#LX8?6(l;@Tb(3ZI%{)q2m_U&qQ`RW?Oez7W^st8r%oLYE5jzgD3tFaS6S^)x$P zx-p=_gr+W!1Y-a1a7J3<)Dx8l(+U`yl!~EEwSe?xDVTPy!^BR7v@6H!8xNdmJHpI5 z#<x*VnEWan2p7#z+9n|cyNSpyB~{e3Tr<AbhVPl<<Tx%>O?Hm!@ZDNkUObJR5&oFi zOGbaW>y^Y&@@Ig`hIY<01g}K=vGijhogo<*DSbE7_^fIigJWTk*qt`G__3L^>9&vI z0D@Sk(B6NTmBnaZ@TQPFJVP-@GN$NsDWh4X{9~~KW1YhbPff<EMb_{68XV>l%z$tp z(;+2=Y3gfD)QD5^<YM(#9QSM>$+aPLUfbh-xG0V>J#7ExDnxzJttqYh@%EKlAR>9< zh_jNdmd0Fpw*ea_b<hUY5Z!Vot?g3FD75OKWjV?Z5kQfF+Q<)_Re97}B(){b<Dw|9 z5g&{wdmZS(k~xRM;Yu&Ft_-j~d@mGTCE_UJ#~_L8M1_p0(_ckeOX!y#4f-1Gv7&<K zN|o|^HHOLuXGT!y--FpP#a8>?CFw~$<jl(%kSv}g0vW;B(n^#1Sk+r~WgKahEPDE7 zF51CEI_+P_Qlx*74r`gR2*KpLsE$XQf74Je?f+Ky##_IiXd;pTdB8bRPbp3itLL^R zoU-h*!yX-i(sWXlLJmCpD@-gzB4np{qXe?^5vWJ(^gUi2EE*Kx7%CG@QCe)WS0(=} zP#UH^9|`b(S>cYkX<W}Sp!2|3AzSOg;s5!4uv<LhDz6TWAsrIQ!_l(t{Mk+$tx!B) zW~#Ey#P`CDO?9n;m(8k4S!2fI<8Za@12h(H4^%ssuZ#Iv`%q(?$(_$lNgp>C;2te6 ziLwSzW$wUT*;tk9xmpvfAsILt{ex^OY@jXSN0T@^Jt-XNh^q2IUySFm#n-7-#cY5$ zO;)iWd(Tlbtwx{dkfleye1?V<vp4aU6g)s<D5I#+k7zrwU+ft-WPFH9-D1edcJwwe zGQrhsYnaqP%aW>7q+?uFEwO)7oK9{lIwyI|SksTyu$Q>}m4dO9n3XCvj;_M8GpDr% z?lza{neMI`mI|3?p>g}NZp_gX8)mIGiYa=+wagmbZ<8IH!SuFS#=2l-Ko#$+7@}*6 zVbE%`D;n7-=)~tYn4hgL9lEYwjgRX8IweuSa#=r5NiAL=|6sQ0qgv_W@&JlC-mM65 zgrWSpv|U8WLg+e>ZleKzkm6@XxK52Y!96k-inD}Gh5M;r`BfEc*&hYd*@wQL&35+Q z@Sin0hwUTp^65_8e4fC%zXeqyIImg^xaPlIR2v8IAT30YIwUjw3wAC+y=#)wPS`+T zY|+&ELt*jfJ#E6Vg(47l1Kt-CeENS-F8@f|az6vOfKr(~EB_oI`F|#AfDO<U4X6x| zy(meY6>M`O`3R<oJ0QYrn=bB$m}MIVj$HQYgbkW{q~W)?+>q8eV6jcg2V;$Qg}*P# zcHCqnq_==tqf&avK<5$EuNfxMa9Ul^lw9wji6$vDauTR9)S%BcjLe;Q9m~27$?Qla zz@nn36ibYZS9tv%yC5J!YPIh`gE|RQ{5<U71<waKMIOOYk5|C!k(e=|jY7bejCvx{ zw~{fx>mXzy1KByZNBv(nVl#<vrPCgdE=!J94bG;OkXWqI1H*&=D0~R<1SFbQBB3Gf zwInBtoziTNFi5weJXe`vCGs_ed5{0-4T7hPM1XVK*krQZn&-mYWQJiQ{M3x2vP9(@ z(3?bgq)PgXfS<$0WzFc7&O}GKvgpW#7dSySTkFOYp-~|pA>!gP9z;zc1jf{~sN?ot zZebfSwBgpFVD&kcFU@$%!Q(%;U&sI+u0W8%${Sh|TS8pHfg@sN@LSwup3tz&`7*5> zSp(J>J@1@;<<cLq@fB6Lo141pkNSxArftui_6x&3x4Pe)_5jjXnvDp>OlSU1{zTKy zv&FUZm+_Pn>Tk5@hH&g@b?KNt<uTaPeCI1tI~5C_X~x@XEy7I6JU1vB+o(<_wx`rp z{1L9YL{Xtq7*EZTL%Grh3Obd>(2MIT%~5Jh?`S~IwOs?c&6t$u%~I^QX~f@UH-nug z4LmG7cg@dubMg>Oj+aA?F||7;yR-zCdfsFP3G}0m+T!dzBoJ+SMRzrDd2NCy-Lj%v z`c1=)7_Xmo7{e7B;N3RY_!kkFAdWF@-C83?n4VS&uEy#$YdyNUS*BwStOO!@UlILs zrJ??$`3$^~C;o8x>FbUaFT9en;LJMo4d)8Z<cw^Bt7o9MZz7`}OHQa@lNl}(iTjqb z^SDg9LchJz?2$8a)xpJWn)<HW*1c9@0iuLc&R|u>gUa%YH+}d97+qTElk_IA?w12z zlkenC({a)O-C73!Cl~W~-!I-Wu>t*G<Tg!3y3fU|i{AYFbPvd))v9Z8s-=zzJvNpi zkiViA+#C!Ebf^m8<X$aoF_u?;sb^_;C7N?5RU0^?{vFuhp|#&<#7G2TecZ@PPbliS zsTi<!5>4d)Rwm9e_)*+~^`wQe{ea$$WuM0|?ijJHivX(>Ui|gB0X-)I`6>lSwF7VX zI`}5Wt5d>A8%wJRr!#y8nbB>J9fpssX)ef4dL{V+gA9T${CTohpxyM15Cy2>s=>oc z!t=*$=ieCq{~xQSN&$eGSc`P~MP49}t@WPa0kDQc=vRu>G{X8j=<Nfj>#4B_pXzo{ z>n7n84SpAqB{iL-m3W)d-Ha_Vhol#G4to^WeY6Iuc<_=&a%SAjerIGDF=B&I=z6h~ zK(wS3voUV@tW`8G0X*fPC!tJc_EhmRvbiui*=*+|TWqdp((v;9mS9)Z#q0;NE<3gC znt13LYkREhINxv{Hq*rK!X7G&Z|ri)<TniH)V*hY6vN&97dn@#SYmVH=&y;e5J{p+ z_|U+7MPu<U4qU30v1YNGZ&+vM%bsgjal9*+T~pfAt{kC0Ef6f|Gk*{{SvlK-f^lS3 z4Q;8<DRoo8EK>{iO*VTs*44@b6_g+~(D&FJMvv%d!_oB&O;5qu?-jkZ(1b!wp0T9{ zp8>rCQHB()(!`7Xm8$n~08Eb=siE~paZiw-ImfSS$Sb_IgH2{xyFv(@nS5=<utbX0 z_6GiqNn(28rKwR)__W}ofY)tPR;QY5vleLV6;w0?zCAS<kM|wrnOGbN*iA-`IZ9?< zvdX7Sdv(Gzvq^XTcWqa#HUIhSvpW=l_OiFS5p?v=)Hm}G1VJw$7tU;7u#0m~vHMSE zP+T6b$RhR>d{cy9q1es}K4`se$v0iB#%7ow242o9n?V%VqkS-K!Hm4crwM-Z=J}NY zgDHB?wG94=l#ikgZ%kQBs_5_;pIA81wrSLD-=RoW>fLZ5y?JM$E%Z6#qk~7htrUhA zAKv84rh=9;P%`Ijid-eQ0K?o~JcQ{3z0btxYH1JtE>N9#ks@3q^4dAZCOCfTs)HCK zlqmTFIN2xT1kH_;=S|l|BfM{vzM0A4o7OsED#K*aORYg1J}P)(z8)6dkf(kzN9onm z^coTkjb1JJqGv(aJq58ZRJAz5WvUr9!jKGhVG)#4a!()s%%^MLKhcW!(>9V9em)Z{ z#;mMBx|oI!?T5WN7z-_;lhSTI^G90~1=c^>nn*7Ftz7JpzO1VUam9Nr!G#&0LgDLE zKb1pqd&L=&PxZX_O167HdJN)}Vho6*Sy<xUeh#&?^mm{ZQ7tj4x;}{W+{5dt9P?it z3cna3(AxtWm&J(2(goOFXz_1ah7i0YvijXC#KeB$2Ykiil0mah_W0`f!^Y@aR=$FT zhhUw%*&tPS^bg;km;_>S9d!<P(oZdBH)`JZ-3H7JZ`CO*%2X5$P(3Ek7P;RcuHwBr zZf$wAss4(}WwaWG?4u~lZmdY4$`O6~yL$)(TUBdQn>m3uzxs&JpqEoYKWs$ZRDX}w zELT-gVe&$g4LROjo5*a~bTe*icMON40^-zA1=3X<d3@g8&arM-*R&;^eS^@NjaLH` zH~eVuyPyz@F8V~L5xHk@h%-H|=V~(aomm9u0E<cz$uuZIb1(gZ4J*SVP^ZGhe4Hun z4Q#dsYN!0R2StBZ)0$^zB=zUnZ7TXN=7y&z8^0UI^i-o2m_U|#gVu;*k$223?xsIz zwP?}7-2Fe!zB(?db#0pvK@b5+i2*@EkZz>YAf$#a>F#a;=@Jl-ZkS;RrMr>Np}V^~ zzomPhbM|}A{=M=2w|+3QW<Aec*B#Hb@_gRHh^voyRe9+P-<=ZrG)=P*V(^B|;tYq} zUkeR9EaQsqi*6IyrBFQ`^@b8v(I1x!p7(3>N1&2#vkS0kj$7z?nsQnh{-9akesN^I zp2V}(mAYeEJNATTY|HL-HcM$G$nq)q4N=>|?~&QZJhz-s+(<aro7E3n<%o?j2+2qJ z9<Lo-!<7o1z9r2}O2@BjgWA{j&F5L3P17aWZ>eV_y{-$*us?UWo$I@-2f71}RH}7& zVt0&E580Uk!l{>wPprmQ5e$yrC7#B4>U>fY0@~)?elD#4USlpa{nbu2J%-(OD3;Wm zS^fk8o#zMQO|9=QGK6MDuW!xVi)cPHQdu=3PW&c58I50-6v=k7e>3@^&`Y`~!epO3 zJ`|o&M%nBab8!ZvQRawkX^S~EN&32wXP##(_WStpP_odqRzu2E{Pv#&E*Az2s(&;O z@)fix^zAuP#m@_wfy1e=7W=TXAq>|aZzf5(RTS9Y70u-<ZB2)Kjd=pIfzUw@tv5ry zPhnD^vc`q!D$g~(qbj;BA0w2R&R@<AsxyF|oPOl<G>{NZ<p|Q-y=5MkOq9{Iy!OB; zL>D!Hb{F(fsqz<F-F2Z)_Vv<?NS!)2bV{3Y1INSx-jY5}m5w<+-xSunZ%!I5Pdch@ zAAQX0v^CS=(TP^M{K4<nkjEII6~6}4raNgpPOkXQ3L~>WvNzZ`p(Hpjn4U2b<$UBc zXzAZ0L{f7(Nk;?^rg`Px!7x$I`>9I`1H3lWAMnSaEteHYim6I*`18k}<w0le@Uhu` z3SQo@`I{Q7teWK&GSU%ep$AC8h99-J?X?$-yv9}w2=Kw>Uewg8ab2~R{-?YQ<lovV ziwTcbep9$9@=(sskbDDJ`kuO*9p7)iy;&x@KRFIFp38LUGJLXJYyC@Q`=iD8fOAvD zx7?ijX1(K?EIk1}@<ua!HKm~#q{r5Y?!3K?+PkLJV+6-65;s7591i2{lWi{fxLEQz zUL+r22s*49<VhrbSI@QK{M4p9Yt(7uh*)TiMolb{l_4XfdRAYbT&wj>=vCt97lb|6 zC{bxuV!0_gu(nF3@zw6m{FZCR5w7Y3>ydfXGB04bAO-c%?B6>Ksy#rfL#t;@1Jx2J zrI8UuYXR8-+Gn5MQk|9<LoWLhp;GrlSh3IYy9b$`hbgHo?@ouE*KHY!y7|c>M@K3~ z@2DHV`AIUgrDd;-ztrwO%35PuRbTG#8DVwQT5ptSr2hgJWCVK3B=gxNC#NVLPF6_4 zhtJj_B47I)ClWqDz@DQK2O&@2*UNK-_8vX8dX;0N=Y)=n+nQiU<;7Z-r^K2pZ(%-X zSbOKBdz6H00_neJ`w`m~uEFNi@F%Ot+rEZ(urOUXoF~deJ9`yvD((6?2s5C>&>Vk{ z<GL?bW+EH>$)2FF`#Ttf*YYz*qHRklcO<a%v`bG0L(?j(D@fk3h_y5ZF|?>g>5uvL z^u~7@@VB{N(sHV^xsL##@Ki9iG5cvp{*-DZ647L}@KVFa8BmogT0JADL@DG*zBNw1 zOki+RHAM}*zRWtv`A7atF1{?FXO626?_P~Wy{@FtjK4Q&E!#?#er-s<n^+-{|CC<I z#qryF$I8()H13f%UdJiY`@Rr$pomT@$}C#1Y?-yl<Iu;Ssx4}^X|8z@kHu<hg~SeS zk$86fZldU7NL0AAS4<n@=Q@hjnlbF>G(;gwT6VYFS&3v~Zu|!$BFv|+hsOqF0a|-@ zn#(uW!_MO&hXMYMnWDq<$O7r$7yhj-0_YoIy2@!7wTG^X*YA3vsaLwrI&!uY^H;g- zp$Qhsa_S}6&AivPcj!7t)`@|WSHcK)g=Jm1`q#<x?+bgDhrCGF>(SRBZOflLwZfL+ zF0^`UpS5?WTY1h4Khs5&IW7dsJom4FXKs13nl_Uql@uI!QBpKRzB+c<Ya{6AzM=Nd zb$RVY97?G`B5GN_X-1y3M~`s)wq$Ghs+(&RrOfMqpwr+J+kdoX0OlZ$U+L>N2`*K4 zAbr(+XzUE2gOx`vF1AedLnXuLwS6!5Nk+aVB{6Y%oB)^rsxwOuri-C1tRAk{#Sa4J z9?*b7o-%88yI)+0=|~olOEv1F0(!NnYaWb;V!sm4BUcW12t?V_{rfoKLDw`Yj!^l6 zZxpJ|!9wF%3!Wzlze5XQGo(5nE@r;<k>~I_X2axzgwdDE1C<hp5ZiFo<ob@cg6P9% zBL1k}LuBl3hIouv4j*%yN`F(8Y?b~&Rg(MdM<QAF^4CCH1((zl_CnJ3)*k{amE>7w z(*`@cIgL-x;mWbyM)EU^<MxUk^|t4_kH~TJ&yR;AXXF@n45_ta!?3D*di@dEc4MnM z%E-<d*57eFC$-$qoenUs4<Z29hW~kDa6*sor)FY{$-Umm3xD+Q4b%N%{L#UN4V|QE zQ=5tb%4+i%?@G43Fc+NsFWWTmhN_N25vCS;E=sY9T&pXA!}|VrNr@UCwd1;v+uTuK zsK()Zd+k=91{6P9lf`?eCr0`!HNy);X+J$J>{g0!c=!@`UbAm?i^_0s+vxGe(T8=b zM9sz36#ql6<`T5$PIixJmvOG0$v@fyUoe}y|JmR8mFAId?@B7%=E3s)1$yR_eN%sB zbR%g7x$80}XWU{#kBJ_B<4OX0{*f3N1L9uuzvei9Tm#)!Ak#65#vB8ogSiu$C$#{d z=ZXZ<9)4$8v!SkgzNFz@m(P$fM-NtQ|4rT^!-pBXZ?h=Q&No1C|JE(*FXU3!TW0d* z)vB0^p;H>lLc!sWPM<TxeQG(+sL1UW&C4Ohm<;+FvlsEcC~PbI3ZgK%{q~jNN}%Fh z_iv^V8_i?(^<}~L6VeqH+Gw{r9>GOq649j!tl)y|_&TeT*{L-mrvh5gLwZ%M_xND^ zieJ%^T&!UXOst4nk##B!a{G-UFYmjwiQD|J&Rqy;-&wbzV6*3F%>XCJ6ZFSob(LG0 z>}~PVW^ZwKs#O&0e=5GhdrY}YlKGsPzK}BXWR?2O7!jl3!n}}htDt49{nOrjApySd z)jh3Cv$F5XiFQJm`7Mwn^dD1`9##l_%rCN~BJ46wJc>07VI3RhB%JtFTe0Yx1jjC1 z!9%yek;_qsA!{LV!1bIbWDQ{OuNTC<P!-?^w$`y0m96z~NAyz;--tdks_%P8u%93} z(#o$`6*(ql$xz6r9E{b(?N?Z`wK#W{+56OEt~VF@96%+_OVl!ZXFE=1W@9=|dqprx z3*~2%UR4*#-aTP5(-)*ZLJXEi0%J&1&X21&g8Hy}BxpDy^$u@9oGSCG_~4#9S<&Ul zq9fu{XW9K|(cee=-yDu2t)}!0KW&iB4bMXy<$PYDs8#n6pb{8iESpcW_W1359-4Gs zls^|&eq8lWLYfhuKM85Ngf6w;)e#<j!Rqcsb}D5`KlQ8Rp}~!H{mTUYpEHBPIXJ)^ z$?&W1%~N8)5ju9B+V@B=DCC-2L+$gzA1=4<>Uf-c+hS<FK5Fa+K<ifLRrXZz^oLO^ zGt<b|lIXZ{V_7n}TN$lJD!=LX)EH%)Oo>jh$j_K$72P)sv+@vVPkw^hQq4L?U@}3Y zcoM-~?58F?3zDzsOIh_yqtP-^(>mq_%Tb3UW$;y1M6+A^1cLDRFN#Mb!_GDuzeKo< zvuNNqZ#CFzz9y6Ky6;vK-<gmk+kUn75HjQ;ZIo{ox%nWZQ-siqVbPn7M4ydBFZG7n zA6Ms9W)^mq(Jy8l%Fz)k?5%)8Hl@eoKTqUuqxV@AYntO&CGGp-N-HsP8PHzrnS&?k z1!n!$Xi=jf+bt{Pz?>RvZb<rqwojw}g9=WWKkx1;%!D^*M)CEU$HA<qw}H#{(wFgu zY*y-^NX@>SDbmHW-y}5?j)r!Xk`6Cb8I4J{zm=>f3Yg3vb9^H<3!#i=$jbLl|B<kM zu@@*zQQE7R?3{m<hg0a%ugLJWM4j9J^8GFv)T+(~0t#n-zY@-<uX>YDfqpDfr_UGm z8==KZm0n(_w9{6dV9a~6r<Vtxc+i!MJwlf8P;_3Y3N248cuT#e%nherT{EvIf4hEM z(|t(*Z%b)uoWHCbIgY(|PVn|TH)h51i$T+5TF0vAj%>d*Gq7V7lKRcvdylAQ)u*q{ zJNzuW_w^H%%g<MD60i9tKTKb}bERDr3MJ|&4lfL1CX=Htf#IdluH}S(EsXy~*`slo zjcFV|tg~nbQgHXV)CjnoGDya>X@4vCk6D1;rLoZHo199;H#<-%&Fj+WA{4f`AW!x9 zPz!@K#Mh~aFmgIo$L+Sd)PL`ojxhmEAYgi73`kT|wFr$2XaQgOiDF@~y?Qh^v<P;_ z+#p~n`@8&tO6j~po=s>9YIdk0thIwvAxz4=n;n`rO46DgQ5A%MKP&o|xNi>`RX?XN zE>z%_Ka#_F;8?`{m70sjpyr1+>G&L=3|eT>;61HpA9*a{(lg1ehaE;Iadbv@cz)_+ zvy82?Tg1CGsml*F(5T`GaG(rfc|ezxVn&r;Qd6Of%*~u26crxMksamo9b}v0quFwA z;BNycC1^=2;?r0q2FZpy=i$QdPRJZLOPn#FketEytcqhp^!j0I>J0kUgwiT#Z)Q}O zRr@G8@94eCysPMT%>QKKnaBCn$|@yz>=sVdf^(L-R+ePH0W}3P2yyGJ46k&%s65ca z0$!GWgi2&5xFaK;os=dc7-Yj8zh&<~>cX&fF4y%0X<!@{z_qnh&UO#y&|k%+oWI3J zd-2sZ<oN73iitT2U;dFR1Yk)^OrA>FU(p)9Yq+Yz;U;9Ms>KmFcG~-cEkvh)LJQOk zQ9uO0Q(`)h{Y5U6_R{HRj?Tq?5+Y0{7PQq?A}P{11i9j|SW8OvnCtd@v8G&o*-FFA znMioDU4uun1TfRI$R?2e$xCy~Bk!6VFgW8xdGPxFYoa6R5!wAMZvr|LyTcZkMC=pV zX#PZo%(^~>@JU(e=j%uJ>omKXJ2y<t4GIo(rgdfV>sEYY)LtvAzf@3{K^5MA+E4CM zsMicRC~6x~|GDF5CdU>1sJrg-zbn|A^kHDQSKX9gQg=54XvsfIo~1^78b!OXNDb>< zt7$-d@~N!Gt5<tRR2=`DhuoZ8<i1fh3z~7@hw^yOLOfFPaW<6ng}fG<gUQn$0n76C z;oQ*vOd&hQ-&B<mRC)}eA(`G3VT*erimXv1H1G16{7047Au6enA9}4<Csg)?(K2fA z6e2z{WSFIeE^{B>WeR=baI65G4)C4K`rY%LsT_3nu6s_@Usv54nQ9SUd4CljFkj2e zQzk6bmPz-Lno*CUQIcU7I8wy};^s;s7YAtxj$3fj&s<6s+WQzh`))K!e{|zuveTf~ zSLI7dZoWEZ{1F9>#A*dK^jazXOl-Bh!`wazFS$*XeiA7YGwAQLp@G?dc$#?JROwl8 z*1wKCbaBa1H#|F{Q*WH#lo@@6hGIxh6KemhsuU_@$LW`-UpvI6%kW6#4=S4U&Mh&_ zw{yEdj`!jH;*P@l)<DJt(H)CI;a0+LLfkCAcp!a{xF0Kjo+Q4c%dk`-N<(qwCe+fn zefWxB8_qQrfL-&=j)2;{GtNcH1HmhZ;-eb2tH_`A7_S$r$$7->DRI=Q_=0UebL!u| zh-k+VGJJ~q2L*dcUXf~_(0R<S3EJ~?y{iwh2osm_^NULtVLt|*c`*jPj2j^YXv21W zWmSzykgVCGp&E^7K!jIIqC+^1+ev{um6T)t=%JHAoD)Dd;&`7$bUE@;oM2A;W>U|y zzfS$Qd=S-OB;nGMo39pEvav8U<Gvozfs<g32G05(zwj#ByXS?8>~XQVJ6~~my)unM z|K%w!QdD)au#OaIE6pc>T9GyE)(lIuX0S|>p|C~`6|J)=emTWIk))>2Jl1`pQEC_i zygP3C2ZxUOb?H`4_*KK!{C(3Q6^F#d9je0u?n(V%mbcuB6X=VJ-11tz=Eep`!w!>& zhb5<Ma;FJ4Inhu5YKk$exupbY^Z#4y=VtCW#<cZ1B=fWe>0gH~fqME1K0gV2d`{`) zopBW&U?S@l!{$HHg#9qpTr|ARD4q_fTRW|JqZC9cs6VrS)qcf#(z8CK1Xc3kBs`n6 z&RpT%b@t>A#G2o4J&YkBx&K7R@<(aamE5L8Zp8hVXucBVeN5{`U-31InY!=${C6+V zwO(js34Fp+!8Mu18ArpD_WuF88HWlzxe+4=S_$YTRH#xcb{wB=;>r)qlpjE)@=EKz zzcf@-gDj%a2<<U~^irX!ujKVOjYl4TF}@C4dVnCogtDxmoMRh-r2t@sPiQH{$OS)O z`QBhE-%=dMO$IEZsA?#BHJt$%CNVtk7{A$8M$_=3tPf~VO|HFrmW5BHT8?e;GOqYE zZtBH@IWQLs8VWv2eB42Yfou=4&=!KYNDA9m)B}Zk3ZuuAd;cPuY1B{-b$r^3ccn5O z&?R(6s2`Ekpo)f~iSe{|ie)%3H6EyA)6$9NI=dg<P-SSA3%D;Pp9-t@ajhLye7<j* zk!sy=pYH8=SBsMNM(%k-JwC&vIE5G51*iw98zWmn=`+9b=_8EABp`{Nawe4!x#SAo ziSzCO#s~Cl5#RT8&qF>;Utl}I&FE##G-sqsrX0_R-O?ak!KWz!xkk(FbgF$a<={+C z+&QC6C+1ANKk!A%`cEO|tjf}os4mLWE~v>gEt(XLNarML-Jz1ns(wf^$}11W9q+TP z2imu$N%A~&Q@XAXJ<rSX@#|I2k#Uz%gYPF(SC#rZW5(|vFUXFHgIbE*%}d_mXK&XH zhw8%jZ!~CxVt#>=b)SzgRw4Naz5z;4OT_#A`1e2Q_#x({$IV)3%1O;?S)Y{Sw|$Np zVpyC-0oPxDA$a<hRA|bWl11u)l;AC1{Zn{UeVP0Y?0H1?I?Kc@`$-Tv-|A62BLDpx zuP5RF{&zv<6O!L2YDzHW`w`RyK1F_zWVZPy@lBqPDwy)jREtS8Rz2_agIa_!ENwgF z#Hhc`(IS84XvQ&^a7rLYi>;ni19CL(2mEzB@spb4+#*Zul_E1SjbcVGgGnk!YXPQ{ zk`hxZ6^Wk?F-JzkUDgd6rgO9B{_^%Ji^b0j*p&0Tp@S?Vzu2jQSj2)-K%E7i61J8N z831n#;l8`E45KKV7-eS{DBf|W+k+{N;Xo1qJyXUO+>BUOVyaG&Si5>^r75SU_tFnC zg(f;(k?y3SY#RetN?2LJb~+m(*MrQw1g0i8uP|pW_<}jiup6u~Dl9OvB(scJ@G*Ee zk$vtiTqI)R+Gg%me+tkZao2uG0=4^Lku!lMj}{u)J}D<y`oHwl0qA337B=hmGmIy% zRUB7S34%^Lz!D|&O7qRTkH3tNFZi_u@HbjwEpFbQ(Sa-<XT6)qcE&55>!q-l!iS(U zdHp6Kri-fnLG#Ljayt0*#gbo}WL>NeP7CYLpOl`iPY4Nyn<~&iQ);0kR9KmZhCjL+ z)+mWvOIx3MS$PG2XqM7*J49ky>$v(06HD%ac}$l1`>;ednc@Ui`X7fcm$^UYQSUJ{ zURvS>^w*66Np8RL568aYQz}2{IQp+(rtc{uqt(4zi8LQi<6LuD_UCN5D=dnK+JpXh ztwSM%j`|g|L$8g0vA9kwz+#KJ!BKEPZyiIa1~^%^0i&n}C*=8ArZut}UNFu{BuCa_ z0B_=AW~~u?YT`HFj>*<bh`kzdK>)P@#2n|cm~-O0fKu4z&yR~Ks6!L5LuDBGTtB6I zXKv;O3{U9f^*zQbW|o3)TiEtLdY+}%&<_+K0qj^Mf`1el#6Y@h3!9T7nioAxJEcE0 ze1DG+sCB*ko<Nc>dCbb)Dj_s(^h3>JN~t$5WenvjrJ9`A;yph}@6-by1(b^{r*NW| z@g-D_GJSn*s;PZ<_dBy#7NqbDp)2cYrIm)0uIldFF8L#+;w1*@Lq!4t_@joJ$p!R^ zDlDWstqPgF)7dNZi8dte715H6=;F9fDR?OQQMky2`m4041Ok2{oCC0}j%qiWCoQn7 zG)02jr!a<RhB;}DYQY<o`Bv9+JLLPlJ2$-SuYY*&6z4#mCZ_PN+xI8){y3gx7amjQ zjxA8U&!H>IQ}9DL+Uw(3b4MCiem@>*;rw*6_yif!&l)C({{hxgFiV^BVejX#w*L<i zp4Yz0dF%6(d69!2or`xC+sRK8j^CfcFqcM?ZqcsGT944b0JO3?)j@rM=NU|=Sop-M z@C|OGbHw&5S<zyQsl@RF&&b&O<*2uHr)L^fRWIUN{AT;yOV8cCMhj{`_g9<cg{hyy zZ+ru9+<h^V<bQ}g^BA~J?GCr6*$>2K?QI}wo^HGoxWjGIng34co4en--{Wth!l2^H zP?#ICcW{f045cI_vJyi?|KNj!myUo!Ck$NbTB5O()NoCeel%}xGHd4|!;nQpuVU0) z4z>S*ig_tP;K7qqc@&xJJGUj$9WD?VwnXT;rGjF%!*W`(jV)*i>Ur=c9OU$tVWQr* zL9F%zteiN~?R?lAT&pp7rtbBoYvcL5jb2i>^Yy?-j<w=!pAY-V7koNw!)l{Nt~ng_ zm*SpWn8z0Ta!#e;neaF`$2UVY!UbVuXkDI^pMQD+otW+$LXumRS0(hjI>yxWDNFC6 zyA5ttYR8U~Igbjr_(zB6y*-ElLLD?C&|uO-aE>xTZKLo+OEvtYaIVJ#r2{n@_3%?O zN*}70T?`b5W8Y%L!_nO<$O9zSAW7P#5j{ND1bb!>y-UwK;>YNm7JEy`;HhNM%falL zn4Cqq%Q$R3icc_6oD(?j3Ps!uWOCeHJ-x7az=&J9aH5YiP9AOksUO-<-t$HLrUlC5 zP~3lEHKd^)a1-9}WJjUiSM7Mh4XS3yRWVBQ9a)uL%t&JMYha*7-5M#K+A|GQR%gms z^1Z<{X$r2h$6kXFNFKz~{oxm$3nk%lzWNSXiK~p9ZCID;+EyKf&zw$5zqe%-xI70= zH$M@!w|=t;uj*kd`S!A^OmywN994<pGuZ(!Lp4X_Icn|Th){UeL!mM|suE&>@z2Mn zw`ltuSVhnJg)C1op!OoA+l8;sX?)fXh;kzyCC3cAxG@C}>Mb`UT6tr&7<>D!YbZg# zn?;bn-7OVcsM#{o<y2NOU2P@g!<kZ~#aQd1FC}d^SfM`Q=S6BPqjVJURSsOAU&Cb& zy5{AvE_0N9)O)%5V@9l%=T;nHZkKqyv21H=^?c~Q@Z@1wRzfWf<e&-S@I+3R#=UQ_ zrf6jr6>t6Zqk1M2V{QFA0R;p<@<>VtXqPh<gROMq@k^^|YyODIms#4L$OAILeT|4F z+L4-k#@Sx%@MZ2>ZF*P32Qeg~iR39tCc4Ts^t>+jO-+!WD4(bQs_lT{tCAo+E-VUn zDx6SfDN!$#>HMVVgJgv<aj`UWBjQ&xI0lk+J#$FERwY7A^C&Ow6^wZ#&RieJ?Jj55 zkg62}<qFzMBa{5OuUv@qZ3?U|vwQSH_9mP0G^A%n4AU2`=JDJ?2!CwO+KjWG&S>5n zm)1e2kpWw`;52JFIPY-T-AYWR+=5zJO(F+hE^CBp<K7gDvf`8d+U~ODZpX+yX`42T z>n$%$bQM?Vx%RH;_2wm#yCp*X{u$+HHu`qa3!J29&0WTkx&}=4Xn<YtmwXfaJW3wv zbW4QAVIs65`>JpGruupE#+XZ-Lv8{!M&Y~8^8nThO(HCl!fbk2KaWt{-fIn=E`fAH z^g=814j*|03j3lb0@JDYSE>?Ntoz=gSW6N}IFrj<=O1^fv5~l;ARq5%ttXQ)Q^hFp zf*S7V?DmUr`0^2QHj0yHL8Aa$*ihbHpmXh($gUk;w4z)#lGxTp?XrHZDQEWrDZZ(7 zC}Ou#Im(&&<zl59XL`GB*{rj$M;#ai%so4o%2(`&Y!uA1#;AqMe?Tr6k|&0xJN_hm zTY8Jn6+~5>Dm<X(cQ_ltU58db7@juMNa9HBix+*UY{u1NnYpp7?eCT<>2j~V`ynjF zHL!zMX^PEg>Vmv6aylE|zTA$Y>%o#rzy8Xq@nDu$A54iHcE(xLpt={hxoz2e+(_Ar zQ5X1d=sN%GlCtkMSL)g(oBdNl-K$knRju7((1ix^2T#Q_A&-EI99!w)entVJhB_Zz z%d2_)^)31PlB1Ap%>bs5=oG;+jc-ZxDylLAQv7HjcTk{4&cZjyamX)I3!Mqxc{3jy ziBUA0WU%I;ZV%o}PUi6y!@|<jPPgt3HRmDh*QPq@c;dSa8RVA}C<@t8(SLQug^G`O zC(iMyYsV7>Vf(zAFNP*>Z9dnYE#+`>!9L=|SYti5DOm?PQ|`56o-b)-60$s;U?Hga zIxL`PGOkTOXs1vrDaV%9^Fwq+r9C6zq;<uV(;o7Nu>BXL-^PQ~TyVT{2p6w!^QSZU zZ0Pg(6H}o|SWCwZODJGPYS!;uwV-O3ewR<PE_a6?wgPEM;6nLd*QocgGPX;f`>S|6 zC{+8x9U^Vk?tFcfqcI*=X8ajY{){apTn~s;wMceVOUrcuW|5=_lsp8Kv05KyAKkSS z>n+rf3KIjYx(4+c|3eG{oxVc%56nozX8FU7-Z^eTM$mLV@-MDcZltYj49J)fWug6t zU~>BR&{0`DVt>c<=POv!Jvq_@kk!c_SeVlzk?v&H+<61a7^mMGP50{XkD|1zudUD= z3s8L_aIalL(d!tfrwkbp8}Enc>5QFz`Ml{2q_g<f#f)e8DK*u6vO(G!Gj$Q)%1oJh zSHkj0wDJ$wy4PM|7v{aCnB4RVqKq_jntnM>@JM_>CiAfoy%Y4~9dCOi*O!Fd=})=K zTahTNPL@Q7rmHJGV)>27LGAd#<w(#Y{hwD>1#5b;=Q5RhGRaKF70(Q=9nZA8>o95> zCD8Q8ACBCreA^7?%xZ9~S!n&bS4027q4FxYDI;a7?YQMJ!4ub!+G{%kT4>VX@@W72 za`M`9M7m+;r|otx*WLHo7&R8{+dgs@DRxGCax1r7qvn~l-u|1nOZRyVxVxI=?s{}| zmJ)ij_P*ay{|_N?pos2kw=M`I;`zZSp6I;<@PJaj4-DUdp{!^-XX4yp!K4p(qszC6 z$Vwz*LYA?mx7&ri`solHEi>qpNUxS`<2Uy^2La+VylH1EZX;j#=`c@W9y`)=(%rg< z7|$5d+GEnB7TT2BDD6(}h^|2A^ws1+sp@DyB;Qu4#mj{kpZ&paF?CP6iO%2#=r*nh zNqfB{iKMT{oF)D%NcmHzK9~Y)0jr0?N{`q88W`eO_`j5{2+ajs5U*)v^Z6>ormt0% zhtQw4yaqC7j;Hk!+xZ=Ezw{H}+g}?nNf~`nXB#gcNRjwV1mGlloS{h?6icXpy8U$L zNjAJaRIX%@5WcVrOxT@w-8>~rYWa?Lp^?}bRg5F$k7Rr_%Tlss!d`rwVkkBi%z$%p zYmW8s@m%4e07uAB+O8jM3K*qGa<J|PW<YUqO+QJq*{OLgE2lkPEms?hfX7oUxrmKo zO)V1f{q5Tg6IHTA7IzPfZ&!t&*l8dR{S%h`>$1=g@gaEJZW}B-OQZ_(k^G4BOHRMV zEL?!1-f6Qdji7w!DjiuLSSc9XeC&*hGu3F$*%npD@AG<Z=ljLCWd)V6PQd!;KKLLY zLs1su=A{GzX<3ewy*Yj8<5)`Z+Ve1uRW(Bvm+pagi{4vt^G}-(+H^9xRQ%kEO70XE zqpIO($tNTCikK5n_Sseb`An6uaZVwFTH$7pPAhQ5?(tB7t9X3T@_Aze+Ker8gQ6DZ zevwxGbgB&Gokj<%s|~7pKiFiJp<)8$;K36E68rAW@TjfWGi2WLd(ifKLfgA5@J@ZJ zAB+=oVs=49c`MK$@oe>`?xRNPFR$?zjs5e|3ee@PT&8nNdLYKX#Nqx2nDs&0)@+Jw zo|mO?_<`7Z#8I<n*5R|NygbIs2$chry8>8$+^pBu@c2X9tv)Y*&+obkZ!mF>iTFGa zq$pX#Va|F7%a3jjrgikZs&Hgd)Ta~3{C$<#pWoHy`w&XaleLeWyHG@Ce)Hmc*10l3 zF8+SLZZmhL$rVxV08jF|^+28M8xz*zfe@L9|FQi#Nq~Fy-#tD)Q&W>!0Jm-qVVW=e zowdl<w0{b|ih04+fJnddQ+`Y_O+2rKo$XWFy8;wiN1db{uS=H)zXVT>19;RIJ67bQ zxH}!kkq=78*G1ywA<T)wCoO1KsXKPO*d4%oO)VSt&h|0%52{%j_F-b>@@NX`UB|z{ z3Z_`{dR$eK3pW25|C7CWjD6s=V=OEa!lY`)8?rehNV*wz(1%KG#R*FN=Y##luf#%u zZCssV+s@VmkW|cPBhG(nqz^Jus=zgN-94g*F}n}5SLFFzr0&h96!;P;-D78wUsgDZ z)PV5GF|ll1#a5Fz$%rR^)N<+IFlSp^?AEei-11)8X#W1a8_M~Pgg8w|`BXOQ-Peao z^RZ0Al*G+1TK%3>p770SnUNlUJU?&nYwTz9ICS^mVeesuS=36nNmsSk64q80M@R>G z+JOj-c?DxFf0XL}jahw24+8=eV^)W1q=cTXqd*1Uw)EdRoqrhH-wASC#s_eEV@rl$ zormC_LJ?Kc|B_q%%ZUH7d;fmvgYnBj`*drCU;qx<s-5wloB4OY_;)MuL5c(Hz$~X? zhWI5nGSoc#xf<sG$8-1sQr!Vj;{(c-eZ$Z5H)i+uKmO0Zrqcl{AqYrB9m3Vsjq~*T zJKg#B)&JKumYksgpyAq5bBxnKx4bYZFd*x{e&D|o#y_5ehZ1lKRADp0T7cu+?LM^s z$3Oo2-~Q{ZeY<~|nBA0_%-2|7IOk+xA>RLeJA|J%HPOEoe+w*$@ud(JkXHZiAK;JA z(uDvbk<eQcIRRAFaQ<Ij?ti_aLeF2p!;2)|5fgCQ+iQA@|LIKs$D2g}6@o1^D(8<X zKEBGeb~mK|_q|BB16BY_u27GmHq>>L;bLI;`w0J6A^gXFeE^=L`-!{)u%!3h1Ac!W zF8|v-4gpldOg_OCTL8GnB=`TvUYP3u7GFN!VW=erSbUAED$oB}s_8ydfSvHQ{7jhu zYz<ySDkSwEOZ^{3olgp^fFTbyX7Kizs#Z*2_dEIjmACmX=7a}4$9J(<C16Qkj*b`p zM@9IL5BO#RB2mXP0*T83s&V!guj6}4x$qmC#{{J&wcWTCaBNq1pwyx56t{NdyeDeJ z)>w8lJnfcB=f5KBJo$KzhIPY;nJ+7elenN<HgUxd0?^9h??^#{)5sCA3B}hYB=}dD z{HK(CLkIy&T}mqX&H#wku#)^e5a(l)go*T3QUkr;*JuveYYe(n&2+2!uJUqx4)8wK zH&@4}f`{`YolmX(V-`T6AHI>+d~{di@F+g-uouQiM8AI25_+)BoVg5Qt^ixMbzlk~ z^*ng$T@_U6?e#zl=V5wx&7~@jo^MkkZ&<~cUe-yl0Uj0B<)9$-jjh!i-y_`o-KMr; zx5Z*vLdH9wOzL8je$%b?>8a=Kwoc$lW3lJ1dBMH&(*A(=9sAu;e53G{_ojE;f%BHo zSDYGNt>JCLRFPY;C%tdFv*&H4$M=1U%3dQ8-MHXoXeg@4zbFn%U#;CuDDub6Xfuqh zl(OB&a<x`p${iqUSlYwtk(4c@z(4TxT|an`>voerhoDOx(UrC*+|%<B4n2YKH)|)m zZ3Rx;?$RrHnp2g05ofa{J8mRx!o|Wml=6?8YkDR0??$dv2sk7BX$SMHh2QlP14cSw zUpt(QrndF^1C^W}T!Gq04SuT%73fTz%eWVH1Cbo&cvMLqCd}(w$%(DuW74{utl>qL zeRR_oA1qNj1a~BL-T6Gy@80)gE<`l$BT+$DXBJhtSbZrviZH379-Y~S5hyN$4VebH z{YWC+?E_w&o6AP?a9d3HSbHp!6oGc-ysvP<U@$4aB-(88en6+Mz}>pHH?Gvx2y098 z{G2LgAq|s*-gN!1UCab_k$a22sO<WVRnuL-XU4D$X>H|6vYhOW=p3lMUTCGh0C#u& zry%|2-Jnx|;dp7zvB@^*?S4T4a^91fh{lH$je?VcVPmKa3)i3KBCXQ(^DMg8MmZ<t z->f?mxad7>4XjJtw;R2V)W69f<6&96v8|T+8|Tmq!~;(5B?6{j7?zUBSq2fkPz+HJ z&mm`sVF58Va}NJlc-U`m-s4jiW_5{~-OG^n2R4e1nEV<(lgk=|qwDXWc6oSo-+fT? z1l5IIPDN~=9^YyVURXqjHn++*z4aYq)qG8b5ycpuwY!EK#N!%<K0VIecq!8fR^o)# zlyz^B-(N`m=zDPQiEYm<`txQ+;(&cBsmrgR=mBBRAKUbzsLXx$Wp8i5VjLJX_U_9u z(Zq02(I>a<s|yxn=yp~LrnwsHd0;?U+z#K_BpTOj>Sb`jj`mzBxom!@8sa>m|6Kj& zW_P>j`-^MKiBj+Ifr)QYz;WJ&nMhmk(;!bLG9Al_FxYE|d^wTGaX(klsMb%@&H;u0 zaAD}!fORAAdzIM$?hb={1qA3^IfKo~45`;i<>r+q>vUjlXD^5j*vfa-Hiw9@r(6X2 zdO7@2g=B3rs}?*o!5fpv2V}{bu=Gk!f0(gU)HO4b<2nr<oiXCPeAwN!-h&Fn(8e9H z_uB|6SWN3@>XC-qr0p}__0;T#RY484(=si2pa<9U!a9SY;X3`xuvQtK?-42m^c~%h zEvwC$cTjvhRf)ut*AbgFS=kJ}$_R7)@{cP~Kln*Vr<yhUdKEP@+ZEW+mzdo)1f1tm z?kdJw(y!i?P&|GJ#=JE1<8jQz5}K;U>FTjw9GsOJyYY1D3{1;%mRma&>lxXofj&c4 zVSiUH;=fnrAB|Q_g_7cQ!}9N@`5_(Q*Y-3mOJV%-hBjh*zCfL`7HN$9>?k9hp}x7j z3G$DP;pYli?bmt(EAAeDgTe8N`&S0N@Lf1ZQ%KXO<i~Zf_w9BRScS1Yt*jeTHf5&g z{axjy`ELGLq^_8eVFhzm!i_HIQ3`UmPW4VVe_lz*(TD`LZY?3=WXtnp^g?xOmANE! z6B=i3Ey8i<hv3;=@wf_SA<1HCT^*U4nV}!22V@33<-_XHt2zHA6#bGbV^h=Cl-2zA zVlrf?;k@`O3LplE0+#XWdBe>hfRRVAk5KcD#<^<jIridygUj9rV-o4@kDKQj<3BpW zE#9VR7{b%{xUN5+Ru>9*dqL_ROzf>rgNA-2Exa}<_86Ov^Hp{qX7cD>Bia*vt2vWX z*x0qtcpkYpwT<{js5(flOs`YS$Qo8EFHYFVTp~~G^@5s$-1}+5-puE<__zPoI{Bro z!n}`w2q+6HebUp?w8dxP08T{0!zQp<&PX>N5ah6sqja-+dfY-iG(R{^Dn8r6!xSzP ze+Y#M98_|o^F5O=Xpw};kPA=FHv$4O;TS>vqW$1(TyJ@pI!wn#Hx5S!p}8hJNQb!7 z;SAp$softJKwzC*3_37!-`&szyaU^-WVTo8F!F0+NOYJa3$HQw5yt&qf_{y)GPOmj zIYG$IMs5ULM~&Xv9wEWTsIYIhTDpH;l%$E;{`TV}c^(D~0vmX}5(7%35EM+(7P5d# z-itkfv+pBV?T)8k4R1k)>7h9nF<_NAu$trPfYCfl$~xW;7~A*<9?tvHN2%Xlt5B0B zg_;wz9$tPbH<wc@cYm0lf6STDuz29uwV+AAjt`zSBRu3yXx*h4J#*sv?(}4htl8l) zv&}siy3#$7hCxTeoYMBS){QNv8&+pVU1C{aU31~-OJKR#;P<lm@?&i=ONrTO*~-~} z;*XC&&ZKT(3zGYdwIBR4j2z)V3@8r!{T(tPOxc1T?JPyqxW{VLQe~GL$dQNLiQFp4 z#4;BvrzmQ?ors=$lR=;g%=QDf)VM)?DN-xt#)G)5=%U@)<ETS$rj@kdj|MSVyAR)` z3Xt(ko$B)seh9qz*nyJ*61kUi$F8P7pb*<eRI<dbXLeW$tbKus-)e{V<BvjV-v=8# z%U6S(WuP|%ALeeT+<vFrm3tCej`&<wQI@4&gl~>q!|Do0Q1QOfI1Xt#!Z#+~zWBOk zdpGlp-=6;?QTmvh&AtFf7$G@UQ>}njURwZ@MXj@NR+P5C&L%K*1C&|5ct24U%zJQk zcwWzWxlZDf{Z^-EPd&Q<+RkDwrtDh(tH8a1JW(zNC(Pdc^7h5jaTU)YNSjZ<XA=ra zzA`~vOxaB7O)HXGj-koe%+-74f$cAK)zr=Z5JEg;IPA!8yjC)(9zR9TH5PU?W(uc8 z-)Nl_=(@K1NUSyejWx<SwV;E3qy!=T*~(b}t4Ag>Vj8VA|NGO+AGf)lf~X4;`Rk_s z=jJJmZ(kJkE!C^k4tlw1*S<m$iyEVu8?)lS9T3@>t;ScLS4iO&zM3gl!t(ue(L&_G zROm_eA^G+9?e`Uo%C#zC)1MebdxWxtQVp<HgwtZ33?0J1%65s9h8~X)k?%?kO!i{& zpcBW#ic(eTSZDSUXa;|9a93~UCOHVYVWoOqlG|?Ir``{w>7Zq7V{SHvTIg%CjqgJx zI+(*L%}@y8;~LwR)KmM9uQaxZ<AiUf_E`iDxvpxZ3h$%dkGAQ)YI*mxtIe_3n=SZU zo3zQN3Cpm|P1I>lW5YwF!P<KJrGqoS&+Kc+@%nHNYwx`snn3+<xj>`%UfFA1Vt-}4 z_BoF}p*o*nU9&O74Ncs#fevf{=ulEHE(g6Zy518Wv4xXLUDUi_d;09ey1-f|u`M{Q zENAZ!{ZS!-)BMtKeL)IuLh|TFvUD3x%Ds2*ex$^J_oXf4ohmb@vm1wheWh87-_f;< z@3jH!h>x$4WA8_MBI?>zlHD9NkbIqHWkE?6-RlnW_YbqLvj&)!>U}|^UHxe*%1#&8 zNI6DsdmuLx=DOkfN;hIgw|ygG2nvOR)#^K1H)eXa%+-pQ7DaUA`(cp`R|2u+!}jKX zgKgRXY=d99^py#%>Q1*WfXzPsm&wlH*_>o7R5P^^*W%=NVWGa<DtX%J;Een2I^0ix z?sqfYr_;cBSZrz{K*e@tj!D|=WA!uD)1{5tESD<~R&VID)|JEO7W`8f-t-QT<3Z6= z8`>j_$C#ZDNSA;ZS^Eqbf_fQHUMjq=C=|t?D6X1a7wr0&Owfl)QcoWU^S70Geb;zj zf^=N)14lj6qjX~rN_|(BIJ7;#KhwgU((Xn*XG|y*2#@GcYSBHFW6)iDl-gqAO{6^{ zU0r6Uj-?I)eXl&Su_S7>cBFEFZu$<dh7WvPD5Y7vN-ZXroG`A~f01d7)#Uu)`qe|E zja%i0Br7Z#=`3Rnc1q@6-Nh*G`pMPjqw}t9gKuz1anP%;SUp^kn$<TESjG3CQq!@8 zN-ei<^017ZbG*{0Z&6x2ua%bd7k%Mhb>=@WO4a3mL2c!XicyiYS*YFR)3>@pUb-cG z(~Fs5smI*G)~ti}nd3NQY$i0A5EL-K!xww0d$h%q>Ux0ixv+37+4%$3r`xOzYg`+R zZ*9TkTAh)1RQ^hB)p$U^_9}ZlTK<Nz7;8(1J<}M7l04AIv<X@tkFI=8Y_NT71YnVi z{b8m?aol&#w@q930cm&FLYa5oJ@+@mCtm!nl2`kb(?sO+r`Kk$7hmNge@1rM)_9Iu zB!qNZ#1%H=oYvW(J~F9GeD(u}V|Fe=jbT=}>BYeeo~%#>2AoFU<*MY7w6nF?F$Mwp z;(^C=M+1gy=?<2;OJq_P8CR@~$6xv2drQ8`hubL~9<Vb!qqUX;qbcc)PR=hH>v&%y zci+u>x6uwYWT8+&WnOw|eJXqB>5MU@lpCV`oG-QL1<SoUiPw2OtG|`(esec^%<x&j zY-N7Ga^9ZIZg2B2`}4(1L;#OA=(EHV^4uTy8w@p>Sz_nS?GO?%<ml;x#IWw4xX*V1 zJ&)s7S!GvLNp7l@!JA>5Hu^38K`&j-gP8}iWG5IN1Bh+L4{bKA;OC@Iymg{D%N2@7 zomun;7Eob)=V?wz(9C(N4Uc`jMYFGSN)8q=UIgj(jRQ>(Lr1UwfV^}c*Z?s1UUC5W zJyMa7Diu2r)O^u#(HhtS`n8f2bLMV#`INjF6n$5TG7pRK$}dmu&lZK#ZiHTvqtnE^ zwdiGPj#g_nm7nU&h2?h@QYKzIJYL3vFZ;+gG20kD$$~j{W9OG4^$inlYAIRvX*4Sf z39o{6;eHWV#z!joaq;ZMdv9N;a2bIg;Xf**iI%qNg;{)27qP<`w?^Pr9$zW$_|6mY zRRfDo)ZmxR1%4HZik<Ro?a-`!%TS_O8^H`lumHgQFhuPLTY@d3Ygxu*2%VWbt)+Jx zQj$B$oF(7OjKn#|H}hSr8p&Yk2zzRe{|of~PDGk)GF%C(7$P!zCLLu!?K@#Sp0Tlb zzsz`XmL{!I<%(@@ES4X$E-StLwEYbfYnRwl{f>eG6q!|{{tPVRmDqNQF_3<jk)doe zu*fP+hLNrg{=A}qHv~<iyb|Kh+Pkkq0R<R8Jq!kM2yp1~mTmF!`zEg6sD{TD8C<DR zDw4t~dN8C`u0kkzz9$RAziO&-mM>*GfZku<RJftgrr@_^BebHXWmUc<aEk-0HqcnN zCY30Uk=r3ISV^}>epE5D2>ob~hqYU?D1K>Xn0V#E_33JQ`c&o*fSIkXR1d@T<mrK+ zy>G*5EKncf&W0PtFvy1~aWB0&W2anv*v|Fn1q5PuE3D4Ci?w;|e0+AJ?3^>6HfO66 zSrNX*`vUeZ8PupSP6`*qAIDDeg*R<u5KX7470B`hjm8^xj@E#vnXwikUe~@#<K9$v z89eOAt4V^k7pwF<dQoAJ97?9@2$AE${3weK{n?S%rhqs8Ltk=@Pb)?XUt=o?>uQiG zpn5l==cTppLVAzBOG^f;%)*vgRj`-tX=A$AdEdlM-%cmVLF?JW8$yI?V7`K@gWBP? zLEYeHm@bo&=Zmyx14r`gcBE_LvHrm_V0Uq8*xz}fO0sZHX19uG4SrkjDjBzc#NaC_ zzO6$nNOe{YoS&U4we=Wf)Jb=VyZ*pB8m=X8wOTGvuFU4$uqs;{iULkaC=U3YP_o&# z{+{6Rv)w<?Kd8ioW(=xkKRdOYlrzzc2Lld1bZO)s)K2KF7^q<;(0xq@J+^J-Qkbg+ zN&)|hp&UXNy6E*X5Z-&c#|78=r<V!5C`*c3CN*;UOx8}od+5kTec=cXy<dk6_H~zd zDu87-8{ALbQu$D0-dOd{?LT?|h6BlOFSE?&uBCqDT@>)H$H4R1agI5LZNiYlhJ$^K z;X=g6I-s5#G-hO2&3yO$-Sgnf_<dphybi2r*h6rmG(~9!ePv5U_`blaJ{W1uypWsK z6QQf=(P!Z>Zg+6wcGTW9;p*{658u$dZ-ZX_3NNc!|0C=3L3;A5hCo5%Y^c?AifTR< z+9vm_Fh)m$XkJ_&8v^s7ODKBd7T46@S%WR_-%^JLyzcP$ya!AP*Vz4V+oYv_x$Z(T zm8~M#bMNsynQth(#3HA=O^L8#HqQ%I0}QmCw&t!3b4W%wo7Pnf0OhdO4X=FJa<hy# zx}1uO2Bag!j+ym}r(3Q%L|NAKDkp5}iCu0a7!Gomt%EyjiOQd*Kp=(sBXFxIy7W!G zo8bh4WO10Dj!eZJYuNn>!jt@K1h(sGo%lzS&kBcM-lSI|<9bI0(hfuQOySfgEukA; z;uT*efi_;lY*-!WVwwb+0Z=s*=%jfd3EYlcid0WoN%t9ueNDudd3}$fwFNiHQE6!$ z4wO1KXtjGJEi`RX<7VpxbsM}MqTQ&v<TDz;%vhIzsqDGgp0qj-)zh9YXcZTm!Z>28 zo{Grv+(IU1(omZlxCfoz80A0n-))!9)OS2By->me)$M1mZO7)Qpr3=PF^}&D{fl~u z98OevHmszDf>b{9DLsYhS2@w(3ToZbhAS%?lE(x}$AX@m>-E7u<-l{KY>p<Wh~%q` z(CLQP%lmawSjTa9+DSagCd#K!mJ;}@kQt4YBU}+*Y?5xZ;u06zeLds7uqI~6oO)b{ zlsI_ULD!+<{)o0ryH<;&?LZ?BM-wxCb5u<C;*SP<BK}_Xu4A!^-eWA&!jGDxO%Que zwu^qw$K1wzE%C=hZkopBJEPlHI&G2M^$+InW~RKMWt5&uLr*Au;Y(qQ0pX@dDLn?b zw@r{MzsRKkduP2`$`UhUl2v2P#^Q<@?%`GYyDO?)c=mjkca_hJHJ#V~$brho<w~2t z%+6j%=)DWB_SGKZq*=nJ+vc|H^DL5$iNr}24`PA)!LS(h@rR~&H#2fJ(?F}cOjPo7 zyRBVA`jhU>S+O@(1NsN5R?3HM0U(Q7?qe#d@hL5elC4n>m?;qk`Ge@Y>VPKBw}LvC zz#Ifg(qK&Daendp;jOR~RQS2!F#Se7(amJmfw6Zlb)VioTVmw)-1^(&Y7qyaFO46w z;Z2abYqdt}m&5g@kf;uOmU{+!BJ-Zx3xygvkJG$eS9{li)F=G+?<y@E*Is0{G9C!z zhP;}7hAV>%y%cJQEwc2ypYrp?fFOL_O3fmP+>>uq7N;orW;rUl9xp0p$hz+P$BYo} z0UXHKi@&+z{G3Um$;6TF?pUlNe-z?1@EqlI+QY<K$S>VdXQAyJC9%|SInMSmK-E5= z20v#m;HG=5zvIAio<&_x&Z>@CXf!<@?3QqbzrG%lYmYL*W{dncID3WwXdGDT?ahDq zW%nn)d;85uvix{qDdr-#t!~994@LJiTXnfsGOMRD=s#p#9w<c=dJX25+d(mWmEp)+ zE5=kjHnm;brEsXi+v1PAzv>&xDKyprg+!Fs+e5iOh<D9|8AvGERdI%Yne;|oQ<AHR z!fgrDU60d_%ZD>c#Y^)UPVlfo{5u@bogIMyT;^vx5t{~v;09*0R+H*`rvS-q$Kdet z^af?uCo3o>z)-}QZW8@y3N-Fx4kL8kXRuq7cz23aoP~IZQSk~Fa(sM*z%@G=SIO?^ zc??ET@N603_LBph8-epjd6-w${qcJ9twbY*$2DigK|89XQpYe<4izTF2O5OS2cy|? zkO@`xEsgRqz8DlLrPU*z*}!9vH1I~U8*Pr$RiQW9u*x@SDrt@15bd5hSuz_jIW{G! z1u;~9v9uzAu1Ad)AA!%mlc~mmvQgy;gXzHE`nQ=Nto(vQpUJQ!3Qy=)!t22U%9|z< zK<{Rfc6Gh#?(%ul%V8<}T2`z=^<D3+?dYFG+6M_V!ul1DkfBqe5jx%qfvlU(M_v{- z;jHG0Bi`KnIxB{;V1{{MW+>OatkPHP7-hA5egRc#QsEtRG39Xi%0zAst7^v7`4}+a zV@@nt&oUny8k^+g&E~JQ$41|wyVPmLbnAoNaZ7z2^rz^RTjZy7MI_i3RB#gXcVw!J zH*<JCaNdN~YjHUL8+=h&&brm@oGo_sW5}BPtGXY|xUmnVuR|SZqs|HNnwucV$M1&_ zp)SY5Lr)DW73;f1Oy+n3`WqAb?}yUN=Lub~ACEnMI&?261qo*(BJW&jeLa||%{wZq z>)2ksFA%2Q8D5>aso8Aiy!fBR8ANm*V9o)uoIR6)4<K5YiLC}OZe0IJ6^k7LE@gF* zxPTb$Qmioreu%%qBE}lU$KrB8N^!-Exwmneu0P^r(n2dd>s#npo|ArCCi;D<Ug}U+ zgQW!W#NKRo(%$F^2Fz5M=)qNCWoeUII(l7jtjd)6pS4r`{g9{v^454-u#QwdKB${H z?uh-E*;-UT&x|1hwZ2;rhTk#rRK5%<i6HYVn?-|nn=W^0Hc@5b{rXQb6TYIuZxRwB zD``WnCUk?blu0hyI!&Tyaoas3JV(1mj|&9z^Y^>?KYN7pWUAV#dA`VT*G7;PWJ24O ztM|Sn%2*!>FK{tZ)+i7H-65gs3=~#CxGNlG^)6N29Aylv+5!X%-B=h;h}|!Fa?ZDm z;g{xRqV`~A+r71bAD@V7xx$2LgwyIAo;uIKV;VzBYJ$z=^o*G5YC@RM(F#LOmg`tI zy3x2iE45CtHg^qnvFZ=`ts^1ZMng!@{<F82yi9y+=1b_|Jx6l%*D7Av5H$U&K_UaT zT(xb}ZyM|+knoL*Q(8x&7%$rWPD*>d+Ffg&T!!o9pQ=`sM44&qsmv}c7t;YVTgPeP z>6d3tedIAgqys5Vs4LL1wSh-usl{EzFC~}5mfQ-|QM4PdV1ro%xi{>GZ_9Q~M6T9J zy0<?&Xc3rF-6!%&8|=SDh~+4uw-fv}oAeHkU|l!l`g<ImB<Li=vpbs>x+e0wBplm! z%PhYan8563Z_ZpDM26@5NI9+eSX=}RX~(+LTCFjgVoYrNZw3?q|;M~XMD5Ap^< z<U)Ge#T%Kip<lNGNn4W^+@(+7wr?%--DbZywJ|RG*#uD?SOouP)ldO|P3rGFK_o!? z6ZaQl8YC<M8I>IyHXhO|hoBl0fD4Y&w3@`7l%?BS!37Qds9=1os>fiCz7Z?p_7>F1 zI16#GY8?0i@S0vRsSMx$AA4^Z7G=M_jVdkS7$8W8g3>76h=PhVGjs@&Lr6CxD4?WB zch?Nvozfk{kVAKO!@luZ&-?z@de;81_pv|h5APTBIMA6puD;Im{CWLY3(rpZ_+iLa zYF8Y9xSy|CH*6&5lqi?BgiiFkX-w(NormHwaIZ7&C8_S}$zF_hRxRMtlStqfd$^lm zB-YPJGj~Ei@+dkd2E-$zFPn|%REHvvXmK>kuF1jgOeZkO!#LJdZ{YKV;<r14`PwM= zscN~>1%q!RlG>-t`m3<u4zHncy7{eX)_Ie!#H!%Lu01a48k)yPA6o?2D_j!9HJ?K^ zUJ-`GADX-*B#q741OLH^qR2H}$rAUm{O+rPho_{(c`q85`H^9Frefn!MIPA|IwWib zYvze6TA1l5`o5aL<awrjT{?5#?(YFzaQF5$zZzN<uGY^?t=un3Jz>UrV2Y02b@?Su zpG!F^Bh9#$iTtCPPuC@@rSeJHwy|VEtMFSZ?=c2`(A6C5QwOx`NL#Erd0U#Rp>?{S z2)+<gx>u9&IIJz#Au`zB*;b})849O)^g2dyI-<U+THmnY54y75Oe|D4GL0s{yi(?q zh|6hhv>P>Ty``Ed!x-qxdrCEuY801lrRHNbp7Ni#@hua#6}rC;TX7Xw*K#K;J8`-> ze>}wX(uYKc?u-&g2n~siJ|M^u<g9146COOPnH+8v?l%kB@aRi+raTOGqq?XQFVXQq zwG7KG7<_-LhaB4$v0I-V)C%zg4<s~i{u4rw4uD@u?T&<B0O$|b+c!l!rspe6L<-9a znaCukPDgvv4xEGx7fv4Hs#v-230{Yc6?M_f`C&oqskass@r3U&OX-2FNTho*hSa0q zP~TE}M|(78@AlMY30*>BUmCp=H6ke;f?G?^qJ%&ErnU)@ezn(0X<1^Z+7-xf=F9Qg z45WfgvUEKgC`|Y5-K#~N-9KBVnfH~|86F<iTbCvGMHk$sc$xnd<r-g^er9y{BN=`O zWZ`ng_Q0swvq=AG{fC(|8hy2k1Nz>2p`i9CIq|HUTI`conDeCy^+AWX@*>?x4Qjtr zwMi*|W>Ja;A{_O|ZO4kIfZ64Wd{dQEI3Jl!BGLQmD`wrTAZon%a}N*zDO5Nl3avAr zclt^*Exs~x;K3Ge>&vurY8$QKQiy?&JMPGk=&pVEO51_8eUCBpEi1>|nLZ(@F(a3# z=(l&N1##^aIc9>*UtS9Y%z7Ebj5g%elK^R!*HR0X#_$-|_5xUr6DDhdnSKLfT8cZY z>@D|V<69SgyOPC3l}{fS8MvUKT`zrq^>&@m>-#6p&E-$Go>b3A@t%M5dTuy@{2L3P z{+uA5qrL6P0F4a43n*1<Ro9A;FD|x%Q#Z6vD2;~gP=#+cEd>oHIRpXw^sz~ty>+D* z)Gc#G>XI4P?)&BI3YWRVNW!7`iT;Zhw<avo2w(Z3Y0Sch&rVtIi2|xhraQfZlpiYT zi_>XBvLVpkTnFf$0bQ*TFX5;0;`dbVcT*)jNr0YL*Ux@&67nVrSA*@>rgQ3ur+H6# zOC870yUP}$e*Fy7Z92iYn&n`L^$3M3y2%PUZT`)Dtr;hFlq7J1a16@}U}q9A^Ut*G zId`)&akHgXWNaXTj8WZK@Crd#v!ukjVf%2~&PQnhY{()A_pw_1Ne$`MhgQ2oiAbH9 zrp^v1Ux68ea5#I!uB5KarN$w?EDN&N68c;?^7Lo9En%uW_KYHKe*ivhK@;3Wy&D7Z zg>)9>J8-E$1%CmO=J99DW#;4Ys$;6Yr-)^<kUadvDA-CuS=R`($GMKgi*YPV*Og%f zrNg}#_E2W6t$^DzYhw2VikdHb=BZb_gQv!eZY$}5ch5{HZV%c)UG8nryn)4{DiX7V zf&=H(1@jl%9-5FIGNWTH`&`E?b&mOjeYI9X6ZAN6t~V7=paHmn3xmRF*zUb?IVjel z`GHuoUP$1jfT)kLMyuP0;+Iv+qRkEPvc&j(rL^1+m=>iH2X%vi(#K9O5O>!~wj-^( zVV^O4sj0mdSKtk!0OB`b)<9y|a0%j4%ep)EM9L*NiACR?$3c3Dz#-2RCo@2E({hwg zD>}aeGrQqp)rDI$8p`k{2`sAHF$xrzr98jew`2j*@X-F70`rjxqz>LtNlgUnMmXIY zeLJFJTX$QQ0=SxN{UipWB^DRoVIJ9&b8P&TL2WH`>=F;_E%Yn@p^;dVXsG{pxCse~ zTB$92`Wn>1GWN0>N!`5pUx0+4H2|DW=9@|}836jDF*nyroYWxru;A)m3p#R73WU9w z|B9HXDm|uSl>{P7{rh>->orwg@<WOiKW@StW(>riBwL%J{9u>G|DKisH`BEk+RLim zMwU5QFX4hDG6iwlRJg&$+#Afo(%pGBMG6r1U0CTwy-I^-$D?n-ixW?jG{$&*Mla|e ztks(D&Rw~#4SL3<;6Pqthvcp~$XF1;c^4taA*4K~V|aHb(LwLVV8fbR;48o0l`)r- zyGu=U(y-EityVi)4piPA>ZtWzWj?iqauMcp$Wz-a(1bH5+daz%f*ix{4JP$|g)jdF zJ6BUxsli7{eNhqg%e2Bt6yEB=ZjCVb&dxqJWFibpU(yisB8t|rns+Kw?R;QDdJ2uF zQ{$agRc%fdjW!)Yf-BZ6C1mZvme@vbie>VhEneH!GgBHfaO;t=GW&7~D_e!!OB;<& zuDuCK>?6xX`YaYPIO9bv>e|TsyX9`KEbzK?s+EYPiooN$Idz@dSsZu)RI8UxGgbt% zZH>2TN~wp<2Lw1m6$47n`bFvN4i2Q`dPs>;?*_{6tV9mwI*{soL^hskti(gf%zL$B ziIY`MCmF=LnOEEMWq#(ttdkvy+l_x#IKl614%%0L;e8;g`=Kh~(82x+%?*AnW6SyX z65b{P62+tO5nPv&KO^F|3-SzOnQdhnFPNumbj3X_eY8lT#<nEf-_#yGK73T8xGo-X z_Q?U)$P)~55j(@860$|*{?_L%6?C+F4r9$W#n)Fg%7SM#z-4UT?29A*AKBeAUth1i z8L~%h18(b{2k(6uVScLb+L)4^yi@df2%mEo6ZKp&3We1dsn1Kqx!Jz~$OrAH?+h6E zs()Hce<s@<9x}Bzg!9M1cw4w8Q#$wVwrC|$PiA`HB524a-<WS5Gvk{5LBP0}4>aHS zYplciFPgz(JIm)fQ*7w+59?M165G;z{e>@!8<BV#4rR~168wVkv5Z)ee8u~(nza95 znZ>^0YFz9<mZ^*2&6(mHMh~cV-m{c=2>6F0WmhC_XdL%{QdgM8cf~8KiI%ZYeW?-t zb|w@|%eY+)6wp^k4&aq`Zy<;@mWXQ#P^*D+MTxHsg&c(W_0b~#q6R4CKf!q|8PiF{ zqT385$9t*e++EY|r;t6h9<H<UTBi(ge|X#c<(;zUUztwDPCh5guRU<S&wp^s!|qxX zi`<Zf9*P8i(t=R6apHmR8dP8!#5iwblBppfHtT1~Z*TQYP_|;SofqVfacG{Z7~eG+ zKA|_LLN7xvM~`Pjza5F(s?QfBT|?FQtdcfWo_e``c&}e(MGzC@e{eBZR=oqd%{oaC zHKJ5kCG=@u&-okyaqrtww$|?KRsR6WD)*e?U29blb`&Wm9_1$6Zt-YWyXy%S_egm1 z*IxgdhQw|&)gg%9BJSD<QOa^9BKqTqij6a|(7FFIR{nDdozOIUW`mjavgfNn=85*L z8pVBnhb;o)<5BX>j3~*~i~hF|vi<cGb@351GGW)xo|oi2L4dshO=ZIU$$w(h72JS+ z)8DF>q4Nee>v#jEOybbHq^l<YVUvJ#UpM;|HAI)J%>T7YzjDHR2;;}TjyQllP?wO} zy(JG_Bx`B@L@U7eC8K`(g-0!PpLVI&N1;3>Q_~-~G47;CF303J+a0W3DNZ|iS`zPF z`d!<!MMfZWLu*T~8lM>^mVrqF6(UM)WljZ0N7V?{G#A&u35xi2th3%D5Am&(DQtp& zJQU$S9KdLb-pPf$6))6>AHb)sPg~7sdH(QF5s;;DT#fWXy-ZLs$HH0OnSJf*TxGxS zCQxhL;lqn3Wwr~wWbU<i{u_OSNy+K9S%OPN)0^ZNym6T7h45pRVT66Lpyub(asDtP z9O@grm`vXs%$%?4f*_Wx`!)Wr<$lTZ4Ugw;GJCP?m3_ar=yUNjtw6<8Ss*vg|EaW0 zqh7r_p)VoKF=J7$M*EeAJ9A2>A;Xqo<~ffKbLqvpIyW>weIR}2GgrEY5JTTPNt(mG z<K0UdW-z!0diB~bxiAn&f^O8+d_egG9<&YpuJ7^CpF6cqHg)@1o(xxjm`X4v1kw*4 z9S2h5bx~DQ7ThAY96@lLp%l&9+h~4SplELueVoeD;#W@3GRnfn4Z};*;1W3UpztUV z(|77y{A-KT-ZR?yyg*~YISIMjIZ~szO#A5klM4r<g#2k-_kpikC(V2CFg}78rj=Py zKTv~P#&@N*DfM5BNBs6VkQ>L#=b5Mg@EP*<>n$$;OjV3AqN{AYE#o}zdj;q0`xmuj zYb~7`tM3w{`Pf*M4SBbc8Ilu1&3RGVC>rZq_?aCqxCGx|P5xXWZZ14tN#W={mdGqG zVb7xD{q1A`d}dA~?8ny}L0fRPOZ3fBHd5X^o!)bc9aa&JE<Qpe8dfWbZK&W%hUeRU z&^tS+HQ9>gV+~mT%+Zu+pDeT8Sfj`Jek>2e{!Y*wY4dr(I40A0;XK{q*=q<*1xx48 z0D7A&YzrSxG1?t1jy3ek3x3sulZEBNG5p_faJU~Cp#JM}uNv+WUm+Dv{L%JsO=a*1 zPNIzai_R_$^5eb!(a9rVZnmvbw`a>b=$%#XX#WOMOPf6JKHB@$G~{#WjB~OA*M!x- zCTUdLzW|o*$d4nrz<aL&D2(x0|3K88d}9Eqp~q8HOl?tx3c8v8=hhXW(0+Mv&hHI} z%p6gO@+P=Gwi&HM9`+$<9UHZeS+6l)UF<%HDQ`i@H5A?gW~mmf!DJgmWE8`Ab*#-F zQL_4SX~EG|_&M(pj=birq>-&$7UN7<OC*Dg4y}yOgZ3vV@TSZy5*P*{MwfC2<WHxA z+d)}5fwk05d9B^B83vl>HyFDJ@6Qf(NtB_#z9)#>nwI!Vv%(EB*dpOrf}wrNhB^h3 z0jnM1(~8aS`1);dE%!VXujb*0J{}@fTQFMsshIyvzgP*KzLO44|AeY<a<6Ai-MrXK z-yb6z@^r7q-(JoOCnb?U*rv-XtgXyM3h<G_&;F`s@~)3CoCeNmlvj2P8Ra^h3Awpb zWCkod!=XKp5P%Q)rSNjB`eAMOIx_!@JiW&(*iLjLeZUyNF#ScZuXPE|fhC$l3Hf4m zV{}BrJi*7yo*CFm7J8SiK|vsxCns7uxJq_ol2q+ZPE79Bw6LGIqs?)BIEfneWE6{y zHyE*uS^iH_74Z$OeJ*zY`_1zC@223Hj&kPxwQd;McCVy_eH2$Ecc3b4Jc!+1Paa>e z_GZtrpko0)-;pa!x%0C|Fv!@$jg~_TPQ{8;7r?nqc;!Hx9BcS|IQ+>RYH7Dx{!z%! ztn%Tc*&ywmPY_4&8mU-;S#2P8Z&XbKJnV9aAnP4S2zTK4I}O6h66N*`Q6@|4k_VDM zxNGw5V+~%tXuy{5n!?jV&Dt-;CMW4-m=Eh$wY5V~O4@c9(1@?Z8ir(B5~xsyQ^ZL| z?^jFVs<u#<z^YwL>)fLQgM-fBW}oF@rFtN*{NUMxtEx%FH~&X!vcWvnby0thDI92} zOZ^HR$lhKR@c&rolrj&auA!*KFa4|grPpN)xfp2;^E~p)Q8(~CFNnt-q6b~Q=_7DP z-5<5O!q>Wn%@_#yoZgV(>M%Y(gx6LVt}m^X)SvZ1^uUjo`gNao`=`=)eBbg?wZjhc zWNGL;WCk17Ho(oobyj_E6?4$E)@Mo93wr8q(mdfuF{R%d8okO@iz9225!-J3-U{Nm z1^x+PA<I<blAFiHC_TL`Ts%YD`H@gp+7rC0mAJN>iTR=9nUsdRNqKEbsyS`JOWtti zf^qKem5#4QT`VXiF`4>pA?LWfYu46Ri?Svg#8JkEd|Z!Rm1hAYh5k`I-9b$jkM1vr zG;-XzP?L!PukQ+6aS0q*ZD~*Rx5d6<p8M`C38E#N$wVK$);3aa`>g^hn~K!DKeZ<; zvqQ;4kYg6a7u1akL&P#hJj@#Zl~=PniP>KjOfG=-W+1;D1eRVi^&<GNKw?%TJ|P0b z;pfu4h>7cHO<<8W{3n1?J%8l5C7YX95F<F$+x@YGhtGKA@?$DTz-+Q5mQ_!lI-G_u zBEN>^vj6?L+b+GEC2`;Mc1I5?9b>fzF^u|PIuVYg9|`k4HKELYJmJ9MaK5H+$(HMx z5(iOZyAoC~SqZZU;}Z+&(@)yh?XF+`nU`-NT2h}l79D?%QQQD%$g(<abskWB<$H1x zq(4`?HCbD<^}dslrRqJ{I+dC}aIWcQ@^jzmKV>v-)~>k#KtBCY_gLCk&wk4BHU=<R zl)`|cFzD|$Z)`keWmiqku;z2HsQC^QKkd0xtAmmffxd1^g`qNvtQks4w|LE^dhQzb zcQ_rAi{Xe-ORhi+E4T|wzOVBQR!`Q{-bEs|`NFWr>>z5g?peIwm935#HbQGVHTs;M z292q*>+jFHN27QFuY$XY6cb0hfEsuzOWkLFN2>@9ca>d;w0?cP)3PSV3)8$T7}CR5 z4)pz~_U;whNJ(t8DwP~u)S#&kCz#lxXy>R1-|=TYi5ibq*CzB5bnqfhnBi=d!&PL` z4R?I%c~ZK5qW@I6R#sE7xc2@16aTw>jmM)o;?0Y^9RyQsy>pk2=vLpvE2b~?t&Ugh zU&M=P(8w_BrQ$dEIcL74ocF_WAB1n>%5ZgaFe-rOy^X6oU%kYOXD@ea8P4(ATDMoG za3ap1lZ8nwUxarFjR7@JKM7t$RV7BmUt<Op78$6c?5Z>tgN*C_UZ1xX*bpQO<2x2z z`MKQk>86%+JE1L0w14gNe!fovM8;s>$vL^Z`z}$wYR8iTE?fO|90(G$TfD4AIgs8R z1sA*y?Rdg#bcCq(Dr0b0Iwd#H{&WK?ltEcv4n3R8lA2=EECgH2V$YEy<T2r#VZ^^G z?d}8Tn%HAH@LiCwi<SY~TieT4V9sr!fn!i%+TSzyEWUnMmT&4wg|GB(Q)P7lRl{F+ zsdWSTiDzPwwfPbGy@_iCk#hQ7+9F<tFGssOc{Ix?gix9xWiQqoJMXEleG|U`0atLA z`JMeX(!N{|dI%Y|i0mN=^mvlorq7+x1yc*5@{KT13uwC^tNU7ChN$LRnx|}QC&|oS zC*=1<mt#`lklW#&c?jUa3)rIRnAuB$0D$K?>?ECQ+6FQ8=FA7W&w~u!9JENfWV~Y- zIdI~sXf{q??eUiG_Zm4s|K0XaA*)3B9z6!*4wK8L7oHWbXLF_=WSXZwdC(;eFg3lg zAh|%2v$HZYzMFA1Aa(Sjj!e7u_%{GOLMWmo$@Ai3?zFLN5&gRJJI`?ZmAmefL@Tl$ zTQ_O0qv-^xB&l8Id+~QP3FnPT3y<%^mOS#~Fc9g$#H)TXySY0XYHU{18>dJ<ZM$$t zpy@uyDjp-o<S$q2T~1FrBt|@0M*(uP;yB_RdA?Pf4uhAFK$LTrc5WPWeHlaShHd)q z=&ENo{NI*G%e#LOpKgB3`Jf$^TVMk{WGU8mc@`y@g@)pmcF`n07GIXgMUi%v<!?5O z`cC1Q^Es16;z!g4e$vFf$Tt4&!jiLe#Fl$uclP5}%^v5gqr`NuDo1_rm9Z=5=h<gV zmfzl!sv(`7Vh}&Bpab@<LBc9~V|W^jmW``z!}-9ugLZ!@;WR*TB<|e6Cq#qYOEEwS zAs&H?$*$EUx|OC}7xcM;hf=z@4%ujxyw#*~K{+D>Aql@>b-i@LXmCD&N_+vM`mFO* zc;yeC#V9-+;vR#g@iKXx9vdQQywqPUc0HSAnaI7a>D-t=Mt_V<wRjJ61CBfW>Me<$ z#7X(cka>2K#h%{H$tXx85!YRLZ6Y7f`sAstPLTeKy$3D{l%Bd8R0ROD%IvTqSUOxx zuHS4VoIhjwl(>Ae4~yL#7czuG?2PHo0IIHLMjFlN!6z;_d@1{t-PVB^h{0e!ov6kg zI;$<|TY}o$rDiATnxD;JXULu^AYaiCY=+8CMLDHodW7i7WYi4uob^wQ8x${@)fBnF zRUZ-qbOI_dZL;P!UY6e7@49#j%tnuMR7U4`gsP!`9A$9Z(ZdeL`8|kne;-zQrUY}% zxuXqHP2nLQ`j@ayE2>_B{*SPZnSJlfh8vxGJf6XUc4K8i@8J|MR9U6i>Ol=7VlgWI z^z3-u`#Dq6bobw+RbyMY*zPUqe5j>=!6cV)hU}lV%h%~60IsRd%6b(&+)K%dth9#+ zA%!^(Rmmc(wgiNIvJE^ZW0?<ntxe+uB44i*tO!f5z0B-)ZU`21{wYv>9gdZ@Gbhs) zthcbuxZ|wr48Z(ef=X<xWvnQiEZ=W<sQYC@dy>r$-xW8&<-RK;Ty{-gr<Bu0MVG67 z(nHQx(qke<`Y=6!e&j#+fePj~4KG{o{PUZJ*Z1bPdW<s?Cx?o{?umTcrLaK+;rSI9 zU)u=Nhh2m?jC6psDceA-5wm&$k!ZyG6QWn;257CU)qC*Nm;DVaKLyPzoyXpQkUyHp z>G170tgTs_U5=s@0+IH8bvJ4w8;6Uf&1w~K&ZYeNH*zBrVDR%Pms_PSWGoiuBf7U* z@B_#CBM)4<A`_(aGHnirhS3kKyXAwEt}{ixXRYTs^MfvYgXdQJZ@}r5F(ziV10H%T z7jth`ye%&luBJM}2VN|G_*>A1y2I5yw}u(WMwNZ8_t%`sXD?k#F$X%ZQX<jKv9(Nw z%NgR;ixzVdJEQyjlg!xp`<P8X`Z9LW2yGKFs$TCre_}ORlG2gjAf|-Y;O$Bx9whlC zZE>f8N|x1g-BOlEw-oc3A19hL2l@WiNnyn%C)jFsX!W+i%jrCeE*Cf!Tpm`q7pSLn z#Oyqv_tSa1H)vmJ<yEQu8ZK5Sne*x60~OE`1}Qc+WT<Tit9tiho^At4ejJe+<pIOf z4kr4jlcxQtg?HRaX?)v+Cdf|eUTC28QgUO{d0KfXh5WVcJy-WV5(-1?NXV-?-q^={ zCAuLAQ{(&XoKlHZVz3SMAbOj%I|m2Ld8sL$$b&i=J|7`eVyWxJ4Y$h;U={L-QPBd9 z)6QEdd3o9gYXxXtZFcpMzL|s&a?)p6HV-vX<_*1v5MZ=@9?$V@EAtiJRlI7YS$Ym+ z@Ki9C3YYb37DRib=E|sd9d;pV845{6o#h6XoUMoNuX1tH*A>BwDtdcJZO(ZfhkjTJ zvMjBBJN?<VE<@`hx;3~{>GDOu&uJD{|JQlHS4B@5<!bo9m<|b44v2(tqvZ|Kj^C~! zmu$+LFc8^_83)H14oiA_>n90!?Pv%XlI&|sUIzb5rik0*g6yrJDx=&?e>42lC)_y* z(2R*UUsQeGFHBb*M3d04Y$R4w_|iu+j%F2<njVd-K|K=KD_<-SmMi-Fo?19_$fhni zOZIy!%IL)R(`{DnPmd*w-xK8s3f#ES-s1+)f8+(gU;J()83sC>#Vdgnu>rbqu;19i zu1Coq&t<;|+C8r$FfI@CmZ-nct3l4>Of@^*{|T`O6V3CuXY3fsn5djHc(TYU2jOe< zBwZe7x8NFgIwU*6-<6ri0R0X`gih#s%=GYn>&N{={Ly&N5V;fA?tK-vJDgXwG5PGH zHc{-GE6!T2t}JEG!NZTqK{_dcVJsajH(L-vZ71~wG5TkN{2V0XpC?&pf6g8_#bC47 z$al6%2XYpDmdq=Qq?p%q4w!9v#7JQ|T5x;%q?Hd)OHRMMSe1u0b#}hrdYSDo5x_xN z(W=S(_OTVKSf(Ejpy2ycyNfF3>tpKXMyR#*lHis@(jMY#sBQJ!wB+-=+`C6Sj;@}q zXv2NgLy)6+c+2YL9b)=}EgnL2s549R9Dj_J$SqtWa}4RS!goKGJR@W@G8S3gJWSM6 ze$%LF+O|9}*xUKfSS9XRbh9Ddi23AB@*Pl5K%#TlZnmW5*ciUSP5X`S2&41fKM8;G zWq`$CR5kQDa`Co#RdLrQz0LK_N4=-L*EG<(&OgTY+|InO@VVPyCBZ88?fED-CqQN7 zj(f=-FEed{hI6>#kEsU$lMSFP-H_R;;3b{R*EhQ^g`_>~SMk!;wcAg=8JU+(Ma2mC zX-~gLO^j3EGEe*Q+yu{m($KTCfC$S{zB%%`1K?Xf>}h|0V?)nCo*S6eL|h+0iLX(i zIQicBL@CFI9(LTHbn{K-OA{6qp%FLH`b)O>%mzlQhVWahA4%J~uAF)W^kv8W&!k{w zpoEQeME;FnOs<>i`itD!4je#4fw{fU80&purx|(;ZvGdoI!nv*4}=FqZAx+$DxZ`I zBj>6e2Y52>`_3DP9=TEd?~?#ZIJ+}fROY{H4HS3)*+E;(LOX)TP_L9V*4sM;xK{;F zj2l&!uV|66Tg+d=vF1>sE!(2%zYo*>`C;xXN9ftckr<o}OQ5Wj%!}#h!mOC@WxvGr zB6-$Ce?!54dk2`D%xc}EK8-4;l(hRuJ&?YBa+%M8;W+8Pt)kjo4JBPGGyV!1^qv0; z=ZGqJ3W!uxSo`bpn1+K*OOg5)?-20!2*h6SpTsueC4Q?pvh7|@IPz(<_(tb8Cr#k| zStiXKy~8|Ovn*x2nxfh=uT^Snl3jElhzb;#gN-)=5FY=_i_@b5_~})5$t&X!?G0uE z<#)TJZVaFZOSn;)Y!lSX(v{;kOl$3o=X<@1N3Z&(Y>D^gW0++d{8P7s=2l&We@ZLL zLPG)!_Le~@=~igFAwM)QDDktbvtf1Pf@myu!WT#PSRVo=<Jp8&6K_D~&iqqzQOCsb z-EWvP21wND0o1LPF|9H1zu45xH%S7Y)@hQ-qxl}tX)qru(*I-QPiFoku?iSR%>;rN z(VImOrWK^`QUa0|WYAJCeVyCV3~*)N5byjEcAGvPNgjVT%8@JQ?)-qsW6&qLl0G6| z#aCaiRAmo(Rsk^h2CwUmO7jKE=HMkMYr0o^q;Ib|E`wozo>{>ofR|rC=)WUUo@`mY z%fa<fW<Sd9W=Z-IUiHWoWBv6%3TfcVM~Z+z39YneNwNeqnZy|izyEo1kOoYc45sDo zR?F5VEIhmA`qf4#KsTdkTyVkD2b)h60xAPv5PyjMIvZDL#~sudru!cS7k?Rpp>>wu zy6bIqK4z0o1l&k;VTX>Tsn*MXt`cy`QPLgyg8I8?p{*82UgP7vM8M24xm-;thukCq z;eL-_|J4SP(tvSpL|7uOF`!BE@BIL98~=PQgsE1y|HcCR{mp;pi~plf@^6p$+5gce z`JWc@fAmTIw?F;=U7zH?g|vUh0stK`4lwHNH_NTnQ9nJAMV8c$g8t0~{%Z*NpGI-> z4`#jtu`-C$hRFfoN0zd*_5HulYGIbX$rPpt9(5%kQ+z5eQu@zt`DfAckBjrZDQ@rm ze=qUmdB`&JMh`~C%dXvY;yrq1sMjNlCHyzVT|YtNpVvxvyD!1rWHjOR!Q>MszUQx7 z|B)e+@PNSm=ytSkKky2|Yj5PFzJy|Y4A6F_zG7Q-m+G^SnE%LhTrYQQZ$e0Lz0@{R z!Yl=+u>KUU6y{ngf7$lp6<?-|^JUY^ESO1_o4?kC=MUY(Cf#^;{fkKL(cKyG(}>8Y zFG>GWemQXH8gg11c|?rH#QaNUg)hS)w&sOb#CDm%cnx=1Syq<q+k78-gR*wsGOSZN z+uOb1?m%WMg40pOu+vPId5gtLg7B#Mcmd_72TaaFg1l{<nX`|GKZBDV^opq7X8ycv zsjWOps<lq&`O=omB3E+F^2Otpc1h6^`AP@=t*C$46)h_OpXMatvjd6*FrP}LJOH1* z#JAI%+t)ck3}XCIHK_35p+ubio8F3}`SOSZ@!I27^yZ+kKL7P+kdzY5acb&yTg9d3 zt-1>~w6O4uMpTc6sek?9jFnXm4&)(eRlz3u#oaG|;jJl^{xG{0Tc5Ife1(kP@9UnG zf-)AYskm;@G?$_<+ZSTAX}&VAQ4X%t{COVXBiGCsHE{@)56bG#vfMVFbzTew?vA{2 zXE9R_a$M>G-?@B;4wCEP>Nc#v#-1d}`exgw?b$g|t%)K&!j3$9b<Y6hbH9D+!=CG_ z$h1lTC;sn=y5I&#ZvWDwNdl<CseUiy-MH!(x_hdEo|+&-b7EdnybxSt!_B&08a-8& z(L8%XRByZ2cbR#U>eE~Fyl2>AN{kqm!X~*Q-qDquH54!GKlB>t$uLxD!EN5eOS<6v zxeNBkw&ih%oEA}_6?|OI+$OZ&YCV5u;h_QrVCQB%{+g;j;!opT!|Bv(l&b7yKk9zY zCi-iKFH~GDuU`ivAWyVk{XF@no%y$0Xz&6Y?@>WT_C8?Jf>xa(K=lTdo>{3BxLC0o zIy}`c1IY$QzZoOLuueama(RZ?U`A2>NNw{kC6b{r_LS|dBR@hp2n1NZ>RnT;5V#cX zb~)GBSKN_i)LLzvG%du^a_L_K{=;Y2TRdvN7qTBwt^`*?Qac5G?Z{rYnul0uDeGto zmAO!1!nBIZ1jRFW*Le#x?(8!G?`Jtq24%I6sX6N92_{gREYZheo}EOHb<>j!=R)z% zy<CY_g!~3zVgU`jdb^SCCZ<$hTpdH<W*aoWheM`D<IegL=W@5H8{Qq8b&C9_ESI?V zjY7spqOuXcu7))YsN#q(2JvU52A9v@J;6+us>h2Xl8<jeCY*NWfyFIzc=s#`1l5j7 zk4VTnAl<UN#Lw~EH<68#{PT*|%b7Icm4~9um3~iW@W-5{fTrx@<g$~o$0M+YP~JWt za}?jR@+>mX_x#7qIK^+V?bl<P>J-v&Soc0ou5rA{!vXz6Y-<bX5!QlOj+vhUMn+4_ z2T0D1q~DUHH5}Yv_vo-J4HOc+psaO;t9T;+C=)3V(Te^kqhcFTmDXkeea~@;cn31z z8u4o&=MNtFE%4-pk-vE{<Sf1GumEjLre<IH?tPIf4&-(i^!v~G_)`JJJ1DEX0yA{b zWXj&32Q3VCl-U^J@pf;Va$rHCr`9;q;h<od|4dOqH)OwOOpZoiARHj{Z=efm@)(xi z#Q%&bTptYBhDJHw8v0){Bc$7<`Vn25p7rUsksZ(IAM%=6oIS0+ywtRqM>ecQ7W1o5 zeM<;vS@RI3Xv~<HU?XTO#C?6lRzk4(zd||oJ}D~N<qQLF#NzeEAb&=_hVkI}x1r^5 z=Z-iBUNL<M&58vbh3LtXf>q~Fxne@fuc2+MNP#p}RZSGx5EsRlc3vDJJ%m;-x5-D> z>_Y=xNgi7M3_r^5lD>t_-@*lJ8&MinyDyOPdLOrDchpv$#CV?R(s_b4H!TFwYu(Ig zyxH&hc|i`AS6KXL9d(SM-QHZ=-<U94qDM?vTleGE&ZD{59|!8$$bG`<GB+p|Q|I@Z z$-uEtRM11_@;=Im2#pm$s<MW4WZMp9UuOC1tU+a~gn7@^B$g9O1@gQZIXW}S^4u|= z?(^b)xf8POVqO-li3)qML6FUR7R&Lwe!a+*NC`lr?Av?h85I5K+3zW-S9_*@rxiw! zKA-WQSxxUIP*a#(e7C)EbK?#XAkRZ3Y0JGboZVB5`5GM+>f#}IzX6@u=XPZqQd175 zhH_)NFFaS$k2w#_g?wJqtc~CdToyOuovtfrmvULb3M==&*BlYL&`ZrWNpw%)0S5=H zVr2-GC!ZP?pLL2oY-wkt3DA%Jzf&gR8+z_P61j1MW9|Pzv-OKog|JJpyH4y|UYifM zWTSV<?wT<e;WUPy!@OoVXGQ$&@TQ?un;8H7YCQ`*qP()@bgSA?Wx0IHh7gbkdnLd9 z#b`!_g@5sHL6Ta03cmKBihrq?05jjxv+oZ9^DvQ_W!PX9QaymU7VnEITs<DrE5U6v z=$rq%t}_gtu;-(ASaLP>Rhfp3w&vxf)qdvsz)9M>{>nd`zu6Gcf)~M_a4EZJ%JDx$ zpVj-Uf3!zd512}{+&>Z~u821*cdYmQNOz7Cn+P@zk|xBwhG2RwI^O+JmQI?Ska_<` z%0j7LQCpwZrPoiGjATqo$9w`+cO$uxq1qrt8Hx+25$F7n{v#vs3V!B=Fj~%IdDnep zAu+VO!A02n#x(R3#xAtJ`QZ1&$~N`=D>@lE6ju_SEy?VzQi+wBMW(&Q4*kV@j;7=7 zS5wz*=vr}gMf559+S-bJJdi9_9D_=*?dVH#sKd8!?>7342?y`e{YsXOIw=$3@acN- zZI=hH!^uTW4udS1?zi{7_!8EaGu#gYxJ*+LZgV{*rtI*<%kQCx_Q8^*P%N_<(;`PZ zAEj5r9X4wb4%^V<@)7-zx0~=x(LUu!?Zb&{@{cqPjr_~aTZyTx7BbFpt+sDDJ-SB) zPU0Z2S~@$TRgMDk>5hPR@~8}*K7%{0UhFs|gp{Z{RKk#aeK`awa>2>?Bs_0Dv*cJc z&cjXw4K}-)pB|dyP=R*~Krlzv7qHI1PuP3z$B~w=nY-jYOhKKOs{{pJ>geCK*2$Nw z4a&SH9sS5^EU$HZaK~C>$@dEZ4^(H))>*6LNgE<Q7P6XP*kiU&p(e|HBule>ZWy=y zrBcMIl1gUKCGNmxG#`#?K89)Q#%#RE^SWKS=`Ke>trl_-6%yetEZ@sxIiGKP&TLQ* z%Cw=}RY<SO$y1y@)u<H}6FqX(Z(3j5YcU%uR6;T|Vbbml+Q>%N@m?L4PoEmJg5$P> zL$;-tT(d3k<CR6+I0A=2N9PajY=x(}X%&?4QY?pk2*U2l_)Tq9)ho;8PHcjz>vesr zP4FC{neAJ@i#j_fO=m8fg5oiMb}IKcYhKhiFe##uHC}S5Ee_Y|wbtofeN_E>+93BB za4@@vNA@XD@1$22qcx(dj;0*G?n@H4Ze!gO|6f1a18;dECo76azTff$`(R+;(dv=D zh2nkMw<(o19WE*C9S)Yf)US5n9m#T#ozqiYEXo}}2sCAuDdOLsDcek^SxZ>$I*fzj z8owye$WE8H8g$ov<}dtOj<d<j!ez^oh*_gb37Kpxg~mYiOq&g*os007Y!C0nLQ6*! zJBo$e<8(cdFOa!oX*@*XN4_sD7d#<6e7#D|fK{lSy77o0v#NH3aGfl>2+CHY4a?2) z44jYjrZq%(a&-0)zt}jkMwpi2W}fFJrM?J^@zY!|z6TH0c{r*8?zlWtxLk5}G+%Y8 z8Y1q*j)4HnlpeMnKNZ`0mUR^Ak>zb2{4hJ7s*`#=9g~2inFd`i@le!OzKPSse&}}T zu=gB1`MGm@sfO&iri!ZNlBM!~z#X$u>eGVxk2B-4PvP|}r&srdD-><5w1}6TOhI1J zxErY%`Sxuc6YkHPb>+?-{Hb*mHfJyNBS=&xMy%FGgm^2Cb0az7k<RozTU(X+SF6n$ z$KDG1;LSdc!HNl9MlAKSraL@xKN3u8ziCC9xw@t@f<o=g${}GRD-y*%d#B?E2aepu z!mICuCKDtn!28*6#^Y<MhvWCv07b)G6f-(Fa?eKRy~!+Is&IkSnOQ2lS)0o7McXRL zkg;j*+QH64sBl~=#`v+x*NjPuZAuayuw$F)hp)BNT^u+i+l4rniPweTLzGYCgY&QO zy!1$<NRBLY3GreqTRj7R4ZkOb)L88JUR~7D=BCTRRtIw_&fB@858^@;(%DCJAR%#b z420=+{_7qG>TRR?EP2tbWKg&Lp5wCF2%KMnLb}2b(q&(WwnWkCv_VqVvBZ|E`x_n0 zN6^}-i)_|O!U37>2^r}VW!bwKE4Snvh@!I$YH0Gkq!WhxXdao4l_N;5I*XLMq>-JM zW)0^yJs=5<^50v=0zy_Dk3AC8Ntw8v`Q;okX>#0EGERf7!1Eh^3)2?AwEWYoX!=5J z17AL?Tp*g-T2$Lw=Ku9s%k?^lMz~B_OiPKPxIU82bRcg<^pn?;b^SFMI)wnv1s1ir zv|D)GLoUX*WnXo!v$axg#Wp|ztCiYkViY>XMjl<5_0(=k9MjwvI8WY9Tgs1Ft?+Ol z$Z@!?=&y_)<Inu$#QM6t<&oOdWRiP$Fr0mSd-v|Nr~5dkmEV@>t{~%AGb{Dvm@#XN z!N)Z^+ml!v%lyj%m(!xz8DaHp8FU3}ry3IY)MME+Xo~7S*NPN_NB`4(#cz3165Lbk zvBo_(LOxX6++_H&DShj9ruY=YM5(#WyA`p>fNX{AJ4sQiuVXbP`o@f4^Gx8F>dv#o zjoTG^oLMO*KdRo6WHT5&mXtQjDIQN7Kj_}L6GO2qu~l;DTDls9?}|69A}8SRV)Dye z2p5Ugyl=q^0F*y8XHi{Jv`=UAyLG%b$^yjfRQOEEc}PZ&Crhs&3$drmnI(RHpGu64 zh?$B)IsH95sG@49&6FsoS3Ps{*i9pO03r+_No4>nvf~UptW=n%ZaT_mo5?-HAc>Ac zrhl;SOd1E3uLYts?f2I3wN-VDXdX5?h#ZRt8dYMaQi081u~eGCjlNl=OOOlnDki@e zg$FvSn1&d3YtRTjCkrcmZNS-|$6!=*#4*s$)e9HSV4fv{J2$W?K&SG(@Z)~^r6Sv_ zN_Cy@<W%uf1id~-|M-Hz;P()hyhgahhB~fBMJ?A|tvZg5%yz@f0$Il}INFJ?y}Z)a za7AQx(k&uNgTW-|$Zh6&KKR*5K6jkI@V!4}@@}5ICgS^>tM%l-n4Ro5yOMdfWotY0 zL&TkF0?Vc3(S-x`S?f`z%uG}wd7-4~zXl3Ps=ZvPhl!L`EAmjv-pCrX@2~jv%xu%^ zk+*pKFY>eX94glNiCx`@%%(w>{b7de=Q)4k$CLEMN!8+axC!x(^X6i6^i@uq$4edS znAvVuf1@)j?gm%eok3@RI-qKT3cU9#K3>(&tBsz0%7s6A4aa6$E!v7}ivt$7+K9B% znlSTGLFSfmIf11M!#pC4Efh}U*S?j?t0C@v4Vfr@!6ofJ#UF@)Ov5;ha@3|;!cLrd zJ+B|B8k=Sjcw##-LuuWJ1`1w}waPk-e*o5k#dm(NKkVI2q+JNv5MCk-A0MYdt4&xx z9jh}vTpc-7jtOFU*OqCB6YD)M$U9aV@c=6$*S#N|cQiP-Q^_TW{T07#dzi1SZ_sB2 zCNpI3CF1m`(kNiVHW?g!+0Gl$M1mj<jD3nqBz!_4pX@C+)Xc%Bj$w>$TG-MKZ#s-W zqzz57*_<;jhZ+Wo2+#-*Wb`|VFINO}=eeKTAiE2`W!u=G@%dUEdTi;F=I(3Xt{=`{ ztli+;nr3)7QRz!P<odzEqrTj&wqvQX)rC@kL?H=gjf%w_w5R+blox-VFt*%tjN}_8 zzw%1<!*4s@=~YOs-L`PIEtKuCWz1@{zHa6X?mCv`NbT^*oj<uEgI~otB?g>dwm(v{ zP(4plnh-#`T@&e;BU=ZbS7jC_8@}(drmLzkk5ew<d=%FfTY*Y#Vc;1#ZT<OB2<bKx z3NJ=Gu3h9U+e|lMrNtU$uURhJI~e7ognYk5+QwNVe8Ff5Ilp5>S6AQ0j?7TCLfI#W z_Pzy&IbOD>Ue4TqvqkF@>$pdfTjd-QlPd(-6x?(#(jgg{o{Z+R03@O!9YoqPYw}$t zQlkm}tu_#+eTjhuc{$&yB!YiW?GUfU9FMl21zXrV%>2a>uEs13UzJPC;n;>};+1B2 zOuchx-ToVyr-M#Nym-*1EVu}le0avKG}_sHZcVBuaq#dbcY%AQRL|#;>y8h4$kWgL zDym~A4K`EzX~i#q!?(>sWezDhJdt=#1=>P1ni+4FNa9CCvtsgP<wse@pTb91%7eQs zW3u0+;=WrRFEw88?X_1O8Od%E#^rP$`n3^m%U&HC=}Q(796nXAozLc9Q#AhRmP0PG z2)mbyF<NyY_q;71E=cYpQmEXODTwHm8>*T%S8_N0%!H0&Q$GB)Z8CMK4gQ3|k=viO zsx6_RsmB8x$JJ<*8%5(`XpK_Ir~-=(!o4Fpq1ImsACKp2>H1r2Q)Jp^!L*NSPtC?> zl;U|2B#=zgp~l=80p6<MlGW(?L_{T5zIea}%$B(+dHfqmkdn}WCW}fL56bM7WZXS8 zm8QLu`xCeEN@i)KiuA)AaGU;-#kvRarB<Bi%k$P?2;0a)Z?oaW`<Ra4ho^NQ=asg% zy2Mm&QWPV3BYsiyWdaG@rt7Kp+8~bk&0?LVth(hNl)B1-$LfeZoYHg8`|!fc(cd<o ziXeDFSH@7}Fj?mdk&C_CJ&7h)jW2w18qKgvw+p>vs()|VBbO@1v$ijLXx*<{E4L)_ zo=io$xe1c~j5aWH>64*u&6y{ou3a)aALHY3?8R|4<c@@X?d2)i9`R|dx79*?>r;f* z@e0_)g&i0bn=$b|TQZ3_f^xSN3UAq`na&IHph+|zkMR^}ptClsQ^Xj*tJG*6m203k z@Zuv;ri%=S17vJUz9wIIPv-ABY}yX{uFgn#sI^Hw=lXay2@H(DwLsktfxSfKO<z@s zR$4`vO=9eH_;~fLGo{zo|Ki!H_c&P6xX*jR`;CNa8l-i`BbOy(xm=^r(hEMT4u_V$ zTxz3Vt&w{+)ETKeGzSfa9xoAT?242hg3VUTGLcTosN-K1sD+L*t_%zv$0oQ^M&34@ zW(<)_q%Fot2#&cpf5UaIJ|^pb7%xrEMp6;~5l$IbPA@6&61CTH{IGmGBw+(Xs8nCY zqN1oWday3II`O5gN8S&u=FCI>2g|NqB}^cb^_-Q7dtNqE4$7u(A46ldg58*Sr#bIh z3{T1nOzSCRv{L1puBN?x(7QV|OzjhFd-YB<ZsEdO?tmfr{m<)}BKer@?&}>eSQ8yE zROTGP*lnw#8tf`OorPO(AIw`7w>;>m_5EclfdlI(=H7s)O>O?iJXvbp)Rs^!=7ku( zdf|e%(^^CJR;{cEn^{JSGijMa&GPkAbM1U4p|)ro;}zGO%cvE|C2G;NX&@X<egATM z*6*BXpAt0!SGkm&R-V_6I2SO2Q9sN-tH`8^jQ$_p#7$pO#0rosx@K~E*~J0LSkGG+ zc)v;CO5^=Ll<+kSKh(Sn)wVd0$kXI`)z)l?YDl)Hh(nrAGM5_xIy-o;D#VhCG}}~+ zf3-E3)!-h-`#Y*wd{8JHfYBJ61n=(MW9U7K_VZBAXmf6fKMhFTOMNM>R%RBdbFN{S z_8{F?)g{J{VjW@cHslx8P_R$uSX4HKqRRKu-uODVwXKT7sO}AJ<KL^@ewwwkf~aSp zN=$1qi{>#|PHy_aM)s5QXJk`UIgVnmaO(K3t%0P@FZ0F`hD~M)3eiVp7P-i8LX)rZ zB1DBsH9-+0Cf=pay}0g6jpxg8w=KGGJ5|k42`%sd;g`Xx?_Q2s(_bIcak#5xR8`^g z@G*I8R*EbP<t;A-4(0R&EuP;^tr8KI-LCAbf<>8CF=UKO$$i4ixt;7#O7$G9{_K_| zvv{yV4<>ui;(CcAtd_Z3Ouenjo|SPFx8~qOk@GJ=#JbOTF3L<yhf(N=Nr>a=#L`av z`Q%+=y&+cm4le!id0gPoJMOfh3}d4Y{gay`Bk7KDF;6Fg7Ii!nW|XkI*b2;u&bzix zyV-JLcZ7}d1E?LZcSi<(EbrNi%EDmI<KLpbgtkH1p!P4zX-Wn9oR`i{@-&e%gmlv6 z(MRjw#s!h3yh0v7mx-;TwsjH7iR#o{5m_`n_8SB&;HhX=B9r479Hbk|?kTg!^rw}x z-eX6)wqWgU`<^iJ-0xU{#U5zCFNRARq8$ly71T0UA~rE2wc}}Pj=X}erlUvO_Gh)` zAG!54SpNpD6d}Cr7;o+IWZ}ee{4@e{e;QV*gbewh@7hHl7`v$vI@X-bS2isi$g&>H z&#^V+1AkuCMt&76kbqlq?zswACt1ctn2NH0;}r%PY}P<*SR2JM$mK)2?lE)iz-|5d z=>;2+#N2gz4ixj_GwOAKS`Nx$0tE_fua;WGr{8f*bMZJTfW9OE+T$;PLI3NAxCS;} zPDXgB_bCZrys81G_r;U=?$`-o{aQgrD!zq|wy+T!xYCB4gqLW$Kct|1%rm87$b;z# z?qUgfTK+TVyuA?nnJ^AyB2hQZy8Nk!6S&MH|L){{zkBa28_V9>UL0Hd9Nppoait)1 z%CwnMy3$_#jRn{WR#CMVo(!50TsIz1RBo<N4?)$1n@(BX&AJ+IX98KMY-T>H^dYD< zuiQ)yosg`H@*bsOtimOs0#ObX>UxhWX6E|Fa<e`7^8L<<TF+cy&y$IV$A|MCXF^p$ zz#&7>{$4E6TH$9!Fr#UZk6Gsnj@k`F>UFMXa#@Oj<7n#aBV&wW89B4Y`4BV2?%C)d zQ=>Ku_uNw6T3s?kfcoGmJdbk9uVn%~*txR)WFCtkHyp!2GS|BR<h%+TSH<szmX!qC zm(Lfk0#ERK(wIm~YcjL6MVa_vbWxqx7}kLX^YC72=T2)&_7|NgJ8?GqS@G1(wp(SY z_DoJhWvWM5`=?^ThBHwyBm2KpiLWO<PE5zUFIA0)kCUk7bY9KE%<Y4Y?ShrZg1h#d z<nnatRoMoh)I+^YzQC}+{%gcvt@X?69xPr<z|Vp@;Q)Q?GN8+P(pC?=XTy3lzRtCO zDv+2_TQ6KT{+QkGSPHvsZsT%I$$iqgSB7${bIShJ*gUQsE%}9Lq4IG+HWG(PyT&6& zJ9~4T6k3!%sCnE3zb+-XG5w>d=9&i=Wz1|v*pu3={%nLMM^ks;8u!NdirvwE+#Epq z_;DN_wlVoAI>cQV)XQU}S!_*dedoDGzHK+i)+jI$@kx<;!g$Vm*g~v~Q)1L=ExcoT z)oosS@3U#qe17V*uscV%O0k@4VxH=og&Lau3_NKutmAwnQKGsfY~DZJ^m*Xs>o#v{ z-bWYIR^|yyeyyA5Nfsuf_1m~*)2WItS&fr`1faPc?(B@|U!yJLd`i8}QD8Q0HFp^` zRCzqMwc0XK_o<roI_Q6!|IOciKD>>A5cp`Et_b`YfDN>!v~}W+lC)^c9mc#pwerP+ zm=qE<cNJ5F$KDr>l>Dt?Y~r4y41jA@t)7sSVj57!L%Z<2zzi-NptKqDgaIX^*ZKBh z$<A19NE2oVg#7yzQP&%qE)|S>FODn1G2%B%f{J;0<l~Zj6iUgUWK0qy62Y++t}8&r z!T7=a`}r-7s`dr<pPgSrKOvQyq2+lKk9P_MCzzQS3kx<~b*SGuyJv+03$&@sDfq1_ zzHxH;cgH8?f)(D~x#7)C*XWFlOEx$QpG9en#?;_JD-{!c{=LA5=yGqzoOxl1OlJV} z-Bzxa`D)Zxc&mZhSf*t9+oRdVlh{uQAL7odT7%Ce_12q5J~!m$u`Dc;+hvVpd}WJy z3~yS?`ng5OO*xheJDtTBS#i?NmfrhT{8Y?`QIO^>`sng^+weg`WDPv+v!&Cgd^x_? z9^LdDZFo?cHXMl|F}d6}8?oh2U7%Zl`T~LG!H6UhUt8eG$$k0mw}n_|6TI^M-<%_U zLYoXS8QQIMl&6a%rmwf~QK+Y`o7SjPVan#zL>VBc1JS^#KhVP-CxdFaW)#0+<Y;k6 zu(9e=G|%4yf=bH`9?7Ox!q#4LZNeM^Q{?|jZrf@f20E%Xwp|wIHr_!O%U=wWk;r{W znrU=pg#4sH_P9V~Otic3@p8;46hTNOt##CApPvA^JSnid;G^YtNvU~<dxUy^V4Hw7 zZTnX(MG{i(rWO%Wf?p9CKZUk>z8#9oXSNdPUj<p&cS=|rm9x_-&^0DKQY)acs+p85 z(&>w`_3}M`1?h@{q5&&C7Xi6cN!eehy+qe7ExM}Ped`;8HxJPKjG;+xt5K)ztuwC9 zB;9U<>l|tRW87H=j62Q!i$!CBaVHKIV8Qovld9?Nm8%w2<+3TBFj*VcW7Qhha#1PE zvR`_FuOS0vnv##KUzvDV7CHV>D<9ajADVrvY~>hpOiANOu>Q4K&lM3Aw=)v)i;IMr z2&`JnKS6!wbZ7gCjw*A)kLE8%?&zk>-iW6}$ftL5G~#QqtLWL(22;xGsP5pL;u)zy zX{(u;03iSQuD-a1Z_s*N<VP-(H0Dl*?J40BMM*J3XWI3}{U1x&rh}fw^CCHAKG9W8 z*=49{L6#*o1W^m3Va-5n&AiGN_xqhT6NwE;v`}%8L-yKs)tf{PmZ5gV7V?FoffRa@ zH!O0kDmEYF^>`STMWNu@DBrn=`GBW!W<-UpDq~d!h`ag0D%e5UQEIvN`Ig|zlioD2 z+Md2b<Irs?fsu@|DWOBHF8R{rr@hcmA`Y?F^Ok49*`^{K&XZeVy+qVUj$+HdN`i;N zf|(4>#$mJ%P8_p=5@RjFOm%%A6dmT@2G_T9B5aGp4W+U&&{3yUH~cdqDy4Fk%)gkZ zUy0649FSXIkEkupf#!YMEMVo>yj(2JeXiXW<2`ZC^U<*4lbA=xu>C9N(zWY+p+gi; zIJuBRj#O1V_ZeySGnZ!vF4_lr3Nl;&7h~@o*3`Cj4=WY~MO4H>RS{5%C=jX?K?Ugw z3B5@V(t8&Xu>m3?5V|x;=nz1<jou+dLKBf1Ahggz$hYD>=e**%_xF7MA><*+-fOK{ z#vF63wW)-}dC~vyL3dy1darK^y9L-3{5Z|DsL^Ms6k3;Geog}U(R#a@*)fCS_WaGZ zf$Z^me>7Ww9wv&fvUZN`MSGiU@+V1=_9;Y{_2f^9`-Fu0C>XokycLBtBMSRAN5Vbt z48^ZPvO#d9424&x9V-d<yuzA^<Mh_oeCKm-y1ePf30P<uQL&iNaaQWeYHHDUinj%2 z=@vH9c|0=oOJlZxae<#C&qhV^%#eXlD^bLxTIZ2RW*Nb0CcsVAEAoIp#~-D56foEZ zB@KW$Cf}sQa6ObyKD<#EoQw;Jy7^Ix;_x(;r}|owCg{bU4aO|GRVEq8B4JB3FUwRe zUY=JxWh2LU^?ELU%o1Yzyw}z`YC6l(e{_YVO}T3{Y3>;fYU$Apj;&m`x9+qsD~8Pf z)Q$Sg`U#LWxJiv{(GBT#Ieo>PY)|`JcHtZ^{l9F{H&rkv3$LaMjhzvE8qoAv{!&5j zXU*L1ZKU$UfzL{90{L=ni}zn!ChJ6Sr}6L_<)`<o0`~lAZT`RsYjllCABze)0?L$0 z$dx^tT?zF`g30#0FBs7|Whm1&>xVQZB^&33u83WVnMMYoRynnMeNC1n)|LSuIx5=? zLBs~|MreNGw39GlC&YgfPAAkOGg?B`;gxk7%y*9R2P<~kjkoxfRuA0!h_UAiU|a7U zF*O;C%L-J_WRyyX3&uZgu`)!@u=eUqHcjwaF1Z?8J|fR<nLl>$v3p+~_txcD340E^ zuHxWZ=OZ?o)iKfaaPc{|5JABJR;EI=v;Y$YOFCTgGCC$~C8TcrX~19&$MW0?H`oV` zbm$3g_uzZ6eN4qk%)bB2L77-wi$ID>+UUC!jZ)1mspKg|*11=7>&H7A-|0y6dJ1fe z+SHIQ4d6aytg{rm)GSQIeINI2APyx*(4%rn&-cYSz9i~|F{LQ})3o{3zEOSwLRsn6 z;#WFU6w22)bqt`-L%(by9C!14$m4>ms(o}bpt&D_PEpM~i4WN`g%@CoU>?MOK9u_; z_w@moV1aetGck0TA2QQ!=1H{g#2AYpZrjw!q#Wv|x-8%QS%VOivUD%zGMNN**FJF& zCfHHSm+R|u&I%lgmdj_5QB($(>u}D=;|zhzdEex~Pk9h$3CZ^`iMH4K6m9(CxJ|z5 z;Q0*=Qxa2=2aL~WW(p;0jlXf;%0x-2q7iH5H<7euIRh-BrDa?(VGlUATKz&X{=;Ff zJz(*$+HJ%s%{dkJcs_$Hn)~>oZ{w}s5K`(_7=%P7v~Ino-HDf6zq7=b<q5TNOAgDm z=-hhVnu!}3dEcA`M{^mmryE1mRi`?zf*9sX$2MhVMmJ5b`0=(kGxihW#Z#1ugdGbc z`o4L2r)u*P`>DF@LUs_tre;fg!~4VCTt9*Bzlr17^yS1B^L0MV(C`q^^g5?gtIn`i zfiylVr?^_pLg}Ozbg=Y(wt-Bqn{<X6yYB0w`lfq%Nj(op>uY|Z@P;QRx9WXrVxQpm z+sBQTUeftcuI@mJxb%Jh*}FMHf#;WTPD0e(ftqvu4M9TPra?t`^jHoDzjOgv*fl^m zPo36K)a}6|H;d}v*Y7_ei-Sg%gEW?01ygK=igcG&x1O9R=eD-y>?D8SDb16VjQB?4 z@y>-R-S=FyRH_$W?F)C44ti*v;#Xu4kw2H4&$?5dYLJqMLLL|n&&}#`>Tb|qZ)TGA z=!`S);P43`Dn5xgT#I{^@1|ni@Q5<5evk%r_nn$af!~LnRTr7w0hGyGyiN5`oiXoQ z^`n%oj&Ygi&W7&`5p&8-bzHxdMSEyA`2YoA>X#K;`l22#G-E5qw0Hl#6N^FnWYDx+ z&lC>!o5e=_DzQJu9Ew)MXmV(^<`yp+&387h`Q901n0V+JX#WO|y{Ml`giKul)d*2h z-y}ORH>o%IdTL&`XM^8?)Rcs|B>vU4tDl27c?aK}qzpIid%oFOn;B+*VWQ=}iQ>E$ z8I~;pr3nxaX70>@YTnEJ7In3nX&~$7%C|)A;q_`AsilppO{eH1bDqHG8$D&p%@VC; zX41!n#qcWg^a8NV90X{*aR}sf(_`%MV;%@=nn=e+dc6H$`uHHrgGe9l{LCfUwe${6 zAMdVM@0X`O$-c=5nR<X3Yvd{@6K@=IQolQo*eGhwAia&X@O<qf?6yEEc%0{9m`*~Y zi=9Yr2BMB{#SEH|2}j>&Uh$W82nvj97%sb8e7%dvY#S+1UhG+0D{7x*-48QFYG$pm z7*QIBS4~kF>(xJr58r(9^!_%QWZ$^}F+es(-*#{^WjU%<b)eayAY?R~0jllZnP8GM z-WJ=kBv$!;8Qxy)kTq))cn1T`G-iIv#6CI>!751$dm7!jZ6`gl`Jvx+)xK8?I-E2s zDO7`{>(?#d&3ig+Rp*AH8LHK8b;`%!#FGjb2qvk5+E_1G^!H?1$o<*pmRww`g#K5V z_{g1Nf2w`XIGRC=ccwo^CNW8fkh~W<A!+k%-7a6ir?K+Mw>^vF*+?GeQsrHWK8-p@ zo4(*NtQ3)-vN0N1YYt(BtTx;-My<Gp+uIr4jyNo1E3hFq;$78f!Oq!CfPCRpx2rN) z_v2Xg4yyMwT67)#I3b(tfOi<B8(eLB3A$DRthe4Jb*yo@;~BSK6LQ+9?9*=*`zu3G zrF<X~i1xgNIDFWiJ)nS*uct7qp5(BVG^shG4Q*JH|73rx{lp=WNPiQ9{JXt*LUHA~ zO}0*UT@?dwk@{D7$_f()!yWCvH}>5gsDeRK43jsA4QPDndb2Oo{ZvBwC-}zMVGTje z)#u*!shSSH)@%FQ9qxGOmcba`^tJEFr35szDlQzE(><R5_@i`!8=Pb^R9gz|URl;^ zTvF+Xt4G#wwkr;>X5}v$=Ul_weKYM=_B<z2qw9@VU<T8A7=QUUlbVqa$M8!iC@U|_ zZe1}9y>NK!buy_<cp;oAYxTI%tWgp`gU>kKf0?9Bp5vX*1HUlYy?HS=X4w44mwjt; z>*sRP@6SGR*$PzGJ%`Tw0ApfdlRI3LJgU$*b&Jn$^WmhXXuiqdsRG8iDSTNT8sQuk zo091+*hz5_-`Chz3W^nuXZOAxWh7O(&C_)<+11@vo%g<<XYGLFG)(KdcU<q@V81@X zSxFp)&2+8ym@zOMln(m#-Q&nbzobeFNjrj2<a}u!mV|y=V`_|iL7EM5H{sP=mtov% zgpVA#4%1_(-F#W=Gic;6eFUcYi>fE1yM-8r50zR?Z(YgcBuLiENuoN!l=M714R<;( zo8(V05%~K#pKNT7S+v~~DUO`__@Uu}ZA1iDS?#sP>B|s<?qSaB$_T)+hz%dlN%a5K zu$lh)<g<Y;>*cW&IA*@%#@NQfPa-WkB0zYuvdad5Wl%MXp4#SgDrVK2muhfd@f~g@ zW*4~mW>|rEXy1lgXDvAIfoBzXJp!19nJ=J6vMUx290x~qv)lBaP<mL;r??NGx~D>B zd6$0VJu;wYECoq84|7OeTXU{&IVTIJRqYv@<G3Q!xB6At10!M1VmNVZWpTre?yde{ z#=Zo+jy3Y)6P|Uf3D&9Tx~1@k){u6CYjrnR*BZ*uzsTIic)pUFvy!yI7#-8Yhz0gW zEdP&rMzu#_2=rnBOJCyR*qCUZ5j2gV^}eaN@!!npr}!`=6s?XUDQB()l;2>8TqwD- z5j6dC;=C8n8p^qZN%y(?_370@0)V@!{7%nx>LC12S!K&~)m7Jg2kjy`yZR-&0}Sq| z0oPx*keB9+%f~_2c3h4Q7IX7MC|$0CkxbtCxp~^52AHAO-jZ})v`Sz5&>wvTlTSWJ z!Pob3>6GxT_4d>2JG8fA3~Gu?F5q!LE*o$-g`V~8ip>?)+#x95IjRRM7f*ng-&fo& zberd4|0b;6-95cEYa+yWJG#R{t|JpaWOH$jSvwXV^E@UBD^a!o(*<{9=3+Go`}F4v zNu2p?Y}y~ITPt&`)f}7}3UpYLdVSfJm-n5pahe=Qt9W&)j%XBJPGqgV{>>}*`jXED z@_4B)*#tdw_qbhXtXuI)qujy`*FlIuA+-IlO-`ER(njLid<=4<+jZT(!?JO3SvaO< z;O%x8Q@`wo3QfAmCC7c~tXR#N>-iViN;;gQVs%ZVgZd`cLf%;he7Duv%4f<YnG}md z-sHG6+8eM)5qK-E6g#v!=4}{-bGVye`*V9o1mAL2#>)@R@d+;9Bez>erQxfVV?g(- zh>t6Q1yqP`a%knH^syL&P1L-B5i_}7HZMu^R;zLTREfuks|l+gX$L<6Sk}A4<-?+o znyvSI>v^!x)eLVrm9r>ubGdypzQf}~)uk!+Ml`4asR)TJp2Z$|^^_g6ADo$Qh5B3S z95BmHU(b@u?C;=xIylrcYZ<v&bR)<^{wvCrno^IJ9M5Ajumurfn;e525r;oWWm}pF zY}9$Z+Np=b^075+O#aEeid^ljt`2f<9JE)y(7~0RN1FmQg*GD<TV};(POBS_G7K7? zvKxAUui~pV#)zEW6}2DAJMITnPeT&=Hux!g67(B_H)zUqZ&yB+vT$<DK9;P^f{1Q; zTWX6fM{yN2ML%lvoDB=AQ*KSV5wa|m=WiKP>#L2$L&pz}J-~!!XmO`YPc=MN9S+G{ z2!=N6lbfoSrQff8CangUNWXiS#&Hc6?HHF^eB5zifH8NAFn(nIS{W_f6~=>X9~sN9 z6)go%R8BR2Gc(s8R>>oU6(D_c>5AH*7@DciiZ*pX5>ny>Utq)U`@ZO@d*#8sUb070 zLE+H{rfGLYIOc9HQM#Hz0%)7l&FXG8ad2ex+8A6{xI~AXFyN0wEM`^tWKKGbWDxv| za`7?E)*r3}W4@7vQv2Ict6uzAxJ{d4j!Jt_^_}n%ew_!nGfa;P`ddsL`hOssUPzi6 z<X`T!_}nqFcF^AY-23leLDl~#utT@N>q<cu&<f-o4!fXvfSC>UCiMa;lbPyU0);I0 zDNZD<*U81zBPLmJx6gS9{3%P60rG8%7!v2Y-C<+~QJj)hG|x+BKEkJWlEajaU(K*1 z{-gE{W`@JGFOB$%5kXJ)qi%Bq{%T3m$6A!cxBCc;u7{){irWU0nUh*6J^~{D;kV9Y z6tbIe%t^zNR<B2a-k{QVl}WwYPsdwa<#?467Aj5O3c*?<VvI>npa+})v)!y=wFps4 z!#Cd!AZ8VJZ8kvMV}E+HN;$%6vWE@DY`?A#btq<`Bk+;?_byg&U0}d!4%cRBh#6UY zx|Mc#KPQ<b`*jJy&E!E$PhUP05<O$4dT}~sI*;B8>F1B)NMg!)7dKtmG+y?F&F1yN zt|4h&0B*{VQO^Rabs?tetSnG**)6W@i({(~K%-BGN_v$=OYk`&oXrynS+2OGZ#m2s zaAvaD>m5S-rc3^_oI;kJcTq9pPX{YZh?LweT<raz)h?p(HI1%zmn+Xd=-#C^Ki|Ta z3m4<=tfkj(aPf;3vKW|DbM`gNMZdOR>~J!}=&SeZvi@K@?dq*@2e0Sse|r7YD@`{u zh#?klk}oHdOzU7V(&}mjiN=X__5k9Kbfbgw%m-s3*)p{kZz0lwkEyL{eCcdHJmz-L z<K$J^+UCv!{{lnC01OQftsRbnpGWAZ)NOD*wHr+qy=9`tdjMDJx6Z*Xc{jI6TQ;xx zRzVX-h00j)+pw-gyR?<Dhnr3xE%KyJs06Fbn!YO<SNVLSu<1?3b7gdYO(m2#F37DR zbdXuX^Jb%F*l8`{N`=g%uNMSwlt?hc6gm0+;tG_z1jjZizvT}{R=<1AEyA47{T4j* z!++f+Ywe7Z`~)Dx{7kx&x%M(gCS_=9vgGP6aAfOi-o_G6&>T8mh9Z7z?znxFj~!Kf zykFK4(=Y=yC~Ylb@1SLxOc6TR7r0TOVREEX`hDpq4pC1ZsD(9$tBqrw%Bh>LTTW_2 zAOp3hkEq<b!}sj0mQ7}1mj=7m;Mlm->49ve2!5!GdrH|AEI35EnOn<NVZ5J=W8;6& z3i)hJat%immDy{x0nRbfFd~5Gi-g6a$*uhRr%W=?_u=l`E+K(wXIoaCr}(kyDNo(} z3y)45k(pNI(1SF}DxDE1SWB~P%=<R3iC@cJ)mh;mqm53N%LDsgJMk;pe3cCrmQnFX zauLuB%Ft;?Z{4qb@71@T*NsUgo>y2IH9))Ek2&>0=W;P^&u5Y+se4>1aGL?m5v{_X z-`ms^g*@Ys(=@b`IF7iWUw3O~c-==pyRlC+CHA#rApPLj%*Wb*ug#rIXU}AJ%p#)3 z?+m6jZJwV@WYhWnScgq=v=OyO?=Kqolfm$aOFp(MibcBeo2SeGPA45%<uz!2g54=k zPU@*YpZ7a;CEOsUjPR6(s{y&pmB}KRul6;`f$lG%QZwqrAnT9yt;_q!F%NPL8i#Wp z(vV+Nl?@sZzRv5GeBXbgL8rsVu2SPEoj=DwUW&u!X$QY?nLD3}qZEHc76yhY7WsPO z#`ASW4$i?7OmQkRN|4J&qe+J@U4199z3)?noU*H_<9B8IsdfI6Na#y68%gHLvM}hU z935{nYULfg^9dX1h#d+BR?0!HWwn^94a!)@od@dOvR8oBG`l;6WmriPENP5V5gaa4 z5AQEmj!V~`uHe|}KY^HAKYGFG$ysewzSEhAu4=mSfgPD@Hoxg_ikU9hF)KnjRXR7l zE>hCTJ-|CYqIBncA&b|8Y+s|M8A)zqi}OQvJCWiu-~lT0zu;ozirLhw_2Qv80_Fyq zb0|-D4Xv8aPn@}9;ZZ$vQ2hhel|13e?u#_eQ>t1Ji2;&5yNh}p@W|Gh^Fm62|01#T zsG8la^({0|{1FxR?Ad=z`O^2D@40xcj)$rMRf3*kdq~88)GE<XI9+CgeIO|xZBS<B z^8@=OR;a(<AsiuwLl`;h-@l}{B}6YK0P~pMgjds}j8h;OC<nR94q5ud<sIb#GJk;* z-|ye5W37*@$;P{#)(c;877gUIag23=?RU+;Twx!2duRyS-baYjN`<zEm-H>_C0<qD z^mp*xl1At!TV8+6p$vpDzofhRJDgGzUZEIg&Np^D(RE#3){@A?$|Ipvq3(U-sJFNH zFYvwx;c)qN9xjklnvcBb;x#>NP$l_(i#tlCb%_QwxdI;aGeZ|iexHgn-AX&9Vd@xU z<$&0SdQK<wHHhf@CUq{&SgNqFSoMo)oRA{p*7XB0b=4J5&SmEzSHG(>Yej2Ga7S{+ z?1i*YHCh;%W9oVmsm)Uo`4Zpfn0F~}Cbw&{Y=)@G*<UH-zVn#-#;txhM7B!fh5c(z z5h-kMt)V?3zkB%<V*s;=>X-@YqKpvtPvtR0Yi~#ZNu>tJrGz!?b>Sqg7mxwrpF@(5 z;DcN04i%Mm`I+WpqZkvAcsYX!s}Ga=#%2RbCLNr0Ft6WCd;2v?%^Mq!>W9m0zCY^p zInS#imv=MFf{!_ywAH-g!fj%hG@k!UU7AyD8Ecq^CxjxOtsBe(51OgexQgxUbi}qG zEcf+2ZcmP0c)Bei$N*r&qAoI6jDYo`XHOsPDiw?(2+$P}e&{rMv2!l*7dN&gcdx*( zIAJ$Ig1OR~PdmG>^o^nM+fsGnQ_UY5j=y=}=zW(NNPl~h10q5-23@{%Rzy_C+`p4I zU)gZ#qQ(iwgtd*m4oOVDScT^|B$VnL9J^jH_1o@zu{3)vIVn^<urz#$FX5gU#{XNS z>FaTYj?T-0WnTjXZc36loqEoKt~0SR7T>AUF=O)9zA!qV)2~Dy&BR*T>$-o*qsF!) zs&z+fjX}$Vk=z#cM;$K$QkG=8&DYzYrW&WxqRKp4RJm_YfC%3_^ZpA3ZY6a`g+gf! zlJ}vaJYg987^yB_NWBau7rvd4^BPUL<*;qOjb&_fbjX~PE55f<C!x>Wuaaop(6yZ0 zJ6j-b``H9v#?6@PnV(&4Ai^61*IJcJw8tjrNmo5$oKTl4lv|#4Lg)DW*bk9FVKP_E znmRupkqbzCQ0-0_ZC!x(WI6fYjp;bH^b7`(+x9XjYPf&e7z(Xnsk>%M#KgRPUST|c zDA^XXkRp?YaWQSScW{eG#tL8ph^9S1UDoLB(>~D5<I3IA`?tyT*sG<KFpbb-dJLpD z7|5)&DGDpmaL4^`Ex;770W$gaj7BMZs#DB%bC|WX6CaY^v6E2XF`8T;q>e1qLA=;b zUvkt3j5=GZ`bj;8axoV<9vPU#qf2)ll{YH|P`TLm`PYS~b{G(g@qYLBX_Xxi#H_6~ zbm%@RD;KpLnw$KBYUv7*?F@zrtw|1qy<XR{jX*Z(x#wgcwZV<bR1+fof98GpC?VAN zKxjoTA!*Gm#ll~vPI=sMFz!st@#>LZcu?S@l0xI8FNW-s37$tg!8JDS_Ve3VQNobT ziW^632U=yTLv_gv&<b^pQ`NP%4})C}*<$(CyeE$pa%BI2>dn8-)geD8i3W8{4F~C+ zJo4V7Q<M0mh1S?~lg&V*XWZfE^;Plm>F6wj3PXur9S+%zcVau=6AZfN%8QW!Mj5{3 zHzW455*8STp%@@JQ*6}<if;WN_oHsi@I|S))1!TgJ+jK~S~CkC3L6IL3p)hcX7)*1 zco93BM5(qMdCXPN*F6v$+1qnM4}$m9fs4j`XLZC3oou-K2``QJh$Es~IPzb#I2z<O zkf!VnV$iRhGc>E`EUpd5hOWR=m>I#LIwa|jXR9(>3GQ`b5hkB~B^@&+ex)Txtonop ze7lhwS@5hz)10p=Vcfeil8cVi;19iCrYYn&l8OmuMR)ehcOY|``QcSM7D)yu^cCp* zuu`mH9k+yay!bt~5q3#yeZvL4%2B*-V`HzYQB$;=3ew`E$`8s&aEjmcF$g!ABQ~6> zbxFxd?5z<Hr#Gp(X9xt7c33He!E9XVN;55b+k_;`x}%pl%L(tp)@|6449{O^eOX>d zlKvqg{zr9oh1!$4m*T;sXLW?ieaP-_`AenQ(Ulo#mEi$XJ+nGgB;z}o*~huIK0l}% zK-v+9YHYr8U(4;Np_D~bd)y1yTBRdjqd4-c)cq+a`%7Pz>PHhRWO`KadrzjSFlBK2 z8bx|5J3T#pCCJN3Jq96`t-w>pV(ZZF_AKy>h2h<Jq>cK$oK0@u+9Aeyj{PaOcXv;& zeuy0V92Qm=C4BzXzP)_8lY5e&7r@O+o|?uMq_m~%kV#%U>c=3BNuOqq|KE0*|NG7P z_|+TzFHQ@!?AJ>VN}#kq-W{SI%JTv3toGe;5j!S80EwxbqQ2p0-ou;-DYN>AU7Sq! z!eOdtF$sf@AGf?pi$mf&x9V0r746RKp54E`^}xkr0aa0UuB$;xqn?)J!4G$`=uvb9 zCKb--R~xs3cy{jz*t@^_5D@IX`*Qs(_2SnIPQ9dFT&G?~i(SIm%tjdl3P)LV?LC1l zTv4J}9B3#0areJo%D<Est$+tUcHD_01$LBk-};Q2>P%rAUbj%#J(=?7lBwOv+yB>{ z+(To>d{sPGUD=~6^+p;iw!e9(RP1A)trjGY-`e~SitMkKuOQ$tznE=@k@uEKZDhHX zxyHx3In@aC74uuWJ|O=Q3{EgEe>R?hyAUTripf*h6FkCgrhx30>lTcJ-G$tMBKcPH zm+JeeE4u5m;N|L-y({A$Ohz6sQ%D+SI%S0W)1UAA0%on{TT>2zS&7Rfu3&Og4QX!O zx^)eslfD<aBF^-$Fa5>&tzMxHz`zG$-~l;vWbMk4vQvLFajE$#<U%&E47Zlf7OGv1 z(g4ekqC+C&CW8{1b+l`o#~!IEW44|CwWR-XgXv+K$&oa=yrXBX)_ZbxKZdn)E^w_a zECHS3Z)24w07V+kk0dKpmRJurao-nCHQeiTaj#~-e+-d!x|+~(i03_g$NJBO{Ci!8 z_HPmKr|I(%b?ug)kT#vk3<q@o^h@7ZFh3)hQJ-@3e%MOBs_ii_EyuX7+IFRC-NH;W zSUo}>Iq|1q{$~`6{NIn{BS<fKN?S@U)V*$t+_g+6^T8K?ny=#Mc6C%(ed=h*1r{KT zJ`PDsy=O6|8yF5;_k&aabrJMWIv><+H%wFmmel@-Pj;1nNVPV%(@x6cDnzUs-`ocT zd#CAFXL^-FXc>=&Lfb7(x~&{fxqYrUee|H%+1-oxpQ#BxLKnx`k{~x3m=UjLOPm`h zNh3w6{b6HZ+j%{_a}N7x06eASKrdAE<lg<h&+6-g_bHk~wI}M;crtu<wl__Ri4S=G z>nILc8rBa*m)1@+KZbqajh{C$3)poDc~8KESvSU`zW{c*rHi__%SvWVug)hyq0&-P z3gV$c#+7g67&5qbee9oE?&3PIwKmVsWE8&hYDC9S#%)q9atJ0yziY(P?Z8g`+z3-2 z%b4`qLo`z9fczhSU~8Qq!~}x?Yuyi3w}So;JC#3|K$F#jq{~Ol{P_AJtqZxCK)37L z<x_2d8_%C5>lGT_FhiSFMLYqb2FBxOL~UO^Im*t0W6@T}u*K#eaf(v0?f(~dfBOxb zD58djx{da1J7o1{YlbZt3ZMVY3BYJi)>18r@cGdQjpNmm?(5y&`;T36-m48ozkh$J zlsQXfZ{trIf)--8{ryGY%QK$13Ic>-+M|zV?{R#8IK8|%*mos3x5K~D&lJJ8am8{U zFw#8-wpM4DkVuvQbpPhcl*iboP@16=2x|1*-4*!tQbr$Sg1u#=xGdc4L~E?yGEa%a zuJ_4Do&s*1UL{TukEn<5tREM=xhFW8yQ{#oPD>A?!*f;KQ{C#3YU~waZn&lWUwQIx z7yj#IYU82R`9bm3tV=73{wrCRm<;Bpr>CzCHa^*XM>ThV%{tA_Umt?epnSev76r@Y zoBNP12T_Qm%R{hMW)<_9V>kwfAN=<WC3CwT1S8h;ck5#6wwTBNiWc;$;QP&qx{>yR z!59u~<^vEde&#&%@#rr!|EvH#qy`2Av-)50i2hE!jsYYMy0Z3OJ6mJsQ|RH)K7ZWv zUGuu?3#x*ez(YSzfh#$Z^`$|qKe|_2pZJ_Vf7;*bRO84<H{k*Ie_x8bW*|`suU}WU zC5AA{ruM)!=Pb*1S*&j^uqBQ`bZC+J<1G606kG63C-Wboi;+IJPBjjHnpZXWLmc_H zEt>DOw~bLjy`<k23{#zf4}<!Z*!1>9;%wA#%kA?()N@En9|A~q>)ng<w^hjF4!kc# zc-}kpbl1o&jlhT-p6TDX0A}DNBe)FMxkKI}_JXOk+{r42Tffxj`>*3Z^b>ZDg=!J6 za!UW54w_8C_iYY}*Sxa=k>HkiNfc<9S_R7nY)ykXeFgMgj$H>sJ_?jS#QfoS|J?q- z@k@Msv)f}kw4DB_t+7HjHeYiO><$F=<p4a4TKb<$0`aCdr@0tdZgAnloLnjA@A99J zM-J_pwtvifnwh4%YZiE!Vhrrh)U-?uz=3P31$NBA7?WPigG)4rEbmYQq_DV+Iy2QM z0E*N%5JCO19r~Z>;>y)k?ljsJaCc?xvYY8@TfE2zyF>Q3{<-?EH!5EOTO9Vj)}~gY z6E+hdJbvDPkbxy5O)>0A*(}HnkD-2glw!%hmv7gi0p%g^7+OXSHpCc6K|ju(Oy4~* zO>)%P$MV)7Zw(1dLx<ZNE<BV!NR7V*`~}s*r3Y7VsKckPSUNihu<V}Ef9|qLE_m<0 zgSOx6gVUbWP<BX_-b?p)Ag@pDUacBEFk3<k+y39&!3Dbxm+l3w|L7qd3eko9u(!1c z&AWPO@NZ-OV=Os`;>7RXBE%rN{uLm1Kzwgcshy4yJg<Y{uSyEPy(d`o@R75^HvyEY zbf0<Mkt~xinOP$7-`7_@wQ&DIMvmOt021GsBeP%yLNVS3FLur0su`FfnF_bV=Dom| z6ok5O??2XLvv<W8W&Zg|D8lv=5+IB}P{2O}S+(8^@>m*FBuUCc1pr$@JKF;gGyXAM zVC&+*B3H8beQgv0aOeoMK^>PrCqqSS-7&f*If3M@P{#@?2A4T(efjqf{&S6U59Nao zA31YXev+2L&d%;jA+LLEE>F;mUic&D{FbQzWEc(*1^T~Y0WHs7HFXw2G{NV#^yr%> zN6x+j|GF4-SK$2rEAQ?JzOvVi(zpG6bVv^5^&_Hx+?OOsDTwi-)AJ~xff!WUGYE1Y z-GLT--$taWj;V24&yNd(xqfSN-LZAs6J0^lervf`j4Sv551exD;lo?0PNTIf*S(#m z>--l#(pG0a@7^uD_(?Ud2<g=Ff@F|kIQKq~16zWaE>+n_2NuDzTIM7%9RmPi=INUF zaJz>Pw>MYh{~K=qwJsHhj<88+?K^nn(6B04x<4i%c!&;|T#}6a+nZ)F=F~-~IMhe& zp%RgWkD>b-4Lq(NOZFNRDxV1oAOy`UPqbDyJm34j?Bn9`Gs2cnK|)Ul;9}*$^X^Bx zZ11NQ7}n7xeF&(0sDJp*qeYdw!&N_1+~Fx={to#Ic8>T&bVY?82*rn?FbH&S+<(u} zz+ZnHj-y9q^}v;s!f1k(t@hOa@y=qfn+k&encKxD9|~>Q2d;OFzi>f38ye)WQCI$J zZ<42HhmMZUMQw)qAw7nJA&a}6{5Lc3K6Z5-rhfjRh)svH6DH(z$!{hPCN2ILun;=v z+Zp|b^++2&Yk)aSE}AjqmdX8MbI#y=S6Yy-U%&1e<;jIBp#B8E|97G010bnCh6$P0 z=0@{sKKWO*(L}}hbG{{FVIToK`6b5YFZ3QXH1N@O`N;{GQ=$-Vu|C9i4&%wdaXoGp zd4%PEgo<+qf^B0kB{rQc+va~jh<{(?`vonqQ=+^N_3k}>R1Jb*MIzmQ4149|x1|1$ zY%oegCaq(s@I6QkeRqY@J{mw;W2nJ2t7XkjXR5|3$RX-LWSu6gOm&9s#8FJAqtPw1 zeuNs`=>$d6F8Uz&5vVN<oQ?ZSSk%nWHbh>-kUcarOqam%9v;+PeUS{=uml8RRgN-6 z$*6>HJ=F)juHEbN>!plIz0OI9lY?+j!b7+h4-<98(^@hn2?|N?ps>zFN$sw|yYF{O zS%1$Az97?rBb_LcqrM<x5olPzYWrN#(y!7XdJVth<*d+D!i|8dCa<4v|3hv1pTu|$ zOT!Z<_2Ao8hO@#Kb#6eIqI0U@G%48{NqiM8sBS)#H7iZ9Jdd~DAK^lt4aDgq;fY`y zar<RCex*IZG{>(NObd(0wc{(=)Xo0z<A3hC{_<6``aQ-jUzu5?+-+el8Y!}QjItZ@ zr>___&H7fA2s2I21LwTt><7xJ1%c<Ce*}&VV9K-mUg-A<0q-Ga2^<HBE%~p+=3<~M z9^hx9S-6{B_}j;SrpS-h20)FB*tWX;uJAJLh%&2Ei>g*@Z-a8W_1lCG2v3neT+9+^ zeBhpm`l`Q%%K(hEUOiRKYQh2Tr!6d=psJ#xAQC@|%xd{FSN?s`b7uS1GPT?&UDcDa zoLLbON0YAm2opw6S|L#^(jxI|rxcpRIJaWOb{oVnwb(blAv-DvW_kF>_-6n_6b~S= z1Wdmqmq&(GNbTA>ib$yyzj<27<YZ$T2X5?tRL_?W9pRL{J_Uu2Lk4vO0|+(i_r4+L z0xSVGo*k_Vx@5$9<X}np{r=q{bM-#BZcW9?ig_=c>4c(C*Flhlg@XSh#*HfXQcsaJ zE~wk_z4ZSG7hP2c)S8x&sQlM-Mw2U+3wE`ng(@FE(_RS{MQvuWV~2i<a69a_N#B=L zK;9b@`r-V3*x`~<TL=JoTB%ug1tSGu#BUb>)g@m(<oe=@X>H<qL03!ap%;IUfB<K5 zTrx9hbTBa=p`txbs%wXe#_K*!Ac;*ntu#I!X`|REoQtN}M|-pnqif2J3!*m{CViDA zRHp-9pR#fbJ974f)DBSX+428bAX)>q!MZ;-lb2efAESnrp#yvb+dkeWiLlnUoS}Tj zoU1J}b}uFHZTYmraawUXwzfMb4J0tA8c;&}Nlr43K?~q*Q_y;yedMk%*^~5or+O^c zLgmOanm#^}y>SSOo`Dh@#h^bkj4(g2{E}J$nP+?U3OqSP%^RlQTlfo(3=4pWA@c)E zP9e|PK&;!&1gxfWs{57K0hpM^cStFc15*%0#+M4E9Qebjz%9<w@ED2zqA~H73Q66w z8Qm(GIR)ILlv3Ce2xV}nu}A~B=&MadX9y{vmkDdjhca<%ha5N!3ttNzU>pe~%~zvJ z;e41=%*>$*lam}=|9>X0O)-L+cI1*}11eMFpTBtFfzK<qzW9FjpoOD=6Rz~~Nwa?! zkikRraj%jf?^*I>aoVOe4xgO5`HJuQFd4LCv1wDD?uDKOG}dbIg~+p}q1WTdBcO<N zIhT?}h42Ws<)6)3Pm_0*fuOc>1E^5MruDT9m1KSRMc~(|2yLkMZQ=LaR?4~}W89`X z+70v|QhI?D(rDO!OOdZw_cG;*m_t|6jYQ)8*mx=i3_qD!SE*}>8+c$Il+)#{^`$yG z-qt7RqW}yih02%<uS==hLQ;4v?AM^$5~*E;uanXI4!aZ95LF*_#g(uAH03|MWs^lP z6$o?8#?hXgG}lPeNZI(pt7B-G5ItF5S~^``M|RNYZ&%rsp+N8j%n#27GXs{mmYO9} zVZZQf%Fv@3NHPzb4~8*vUU4fZ<W&bTzXxQvSn&kQPZQmKMOhAi0)coc_bh4ncJ2ni z5wsVrZvY%|S?k`t6G(a2wYh;u`PW^+`ps_P3kY+cv8F-BbvwiY=0p2?a0Oq#e%+e0 zk+U~E4Tbfpw0-&m3>{m%c#I)1KHl$Bg2i=*(y;h<%xvwsp*#Dm7!z6r>`qW|+wGTU zqOvk4u=h0*CDH)W`FSh7E#TY75ZbVX&&eRF3gK=7TJfJs350@Vpjt;~uRREUa5@-6 zGjj>?Y!8h-^VJw}wLL2UD*Cwfia{TS9zHz_+-Gik0}!OW9I)^!Lvez7g{f}FggQzs zN5E>gPC^IRit*bQQ?prp_CrXn$|aFgjGQU^kg=VP3U9cSBHnz^{l=6H!aTcN;B}|K zT&GVTseO>)Dp7|&DfT96uxqO*)`<khC!=tU6_6WzdsntDuOJGNwL*V_a9Khep2eU< zaIwJrFiLV;-Ca^Zoqrd8>Q7qYp?Yc%Wk(o#v;C)dE?jnfDKf~&qTyvX1Z%{#G8s=T zF^Z|2*N?G5r@Fj!rN~*YI#Lq-W^FN~6khguh+?i#uWq)nIF{!3SjI=nWA@Dmu!QPw zUu>BzdwJZB{6FqJ)Ze0eoJSbk{kiXk_1lQi>u;7w&W-EOix-2z^LyGu@;U?8O48`j zbsJxW6c~&D3}?XmN@%iZEJe*`rve+oWLM9V2U5uKJQ|79s9@4M0UNa47&NUJv=v>@ zInmnI--V?6d9VGNsV`3u&b;AiPCky6N85@B_#?^DzUe@_wPvbmRLh9&Ua#pKFw1`M z&QndE$MpnXMZAj##UM18Kfgj@@}Qljw^`IY5I0IckNE=tfY7LHw)p*{aDmYJN?BZv zb~d~x<IeDjp%R-&&$(~ic~(DXKX=0;Vy_re!?hdcNPj{$jjpjr44^y_*?Fo?B~*yx zH5wpZb6DNnuKRlpU1uPusxAuzNB)s1yg^!-z4gpTm<L37i&B9zd-v1p)mJZ|G*e{L zOqWe-{XaY`zj>k1pleuZ{7(;8=DX_ry}palspg=NIuwJ$;Yy*AqL{OW1_t!SIJoGv zJ&kMiqw6zTc!<a<Vbqj!XEDsLeGS1t9_OT-p|75D6<)V!Pbg>u5A7ZC6N*(gAKryh z|0{DjM;`~j$j!~2#+oiOhSA;+E0GS=qng5R<?<eyfs;=UR<}vjR9~Lt;@o^%yFDR< z0&HzwyC{CASu^mR-1Zowov~xq=~H>rw*9?Kffb2%1tZ1&Zcbg*!8zjUS?^|=qj}wG zn|TW15%yVvJdZnf!<BQd0s&r`5x06K3*zNg{e2jSc+50ek3Lb0`iO{#u8?Gf6u>9= zGCmm$awFFu+0NIjY$^Kw*i;zKIuTy*L0>zc6ZQIC;B59$kNujn-&p<7^P4p)om^3T z?IwEZMIo9qO&vtsGUD^>VXxT{e8F3dxn4z9(@Q$axbT0l9(C02^fyr`M9b6W1tOva z2^?45PY;4S<Hl*#o27n0*N)mg6J8JTwTQv=L`Gr@wP}fyE}nd-`uBI!EkCslB<I(x ztso3P{H+DRb@4H>OTC$ghAo8F68jDHO$*#YdDNWdMuRBiL|y-O$%72LW0UYjU_Oe4 z0{sc{#R+jEZ$BAPF-Yg}tBjYaG<@ZG98*NpFkP-j@^yWzu~$<5he?+BmXeu7wa~}q zqk)D_)k{x22_s1zw`^?mITMhQkO>xKYDCSJg~MRV07jz@FRNayBDFM#@vY`A!MF7F z@V3_)YBw@42-T)5vd3lw?%TSP&4`bUe9&E6n(O^~QXn3AEu>>+dJTfxMp~qySKLQ= zZz~fPu(OS2nO5Nf`~N8qs7~7y^AKG*3!Et$#+6%8fNhH662T3PH%8izH-w)xR;oPh zxZrby<GMuYw-FsHj~-K@?!Mw1uM<bp(&Y}uXs{3D6XgaH9G9z2lIheC&R%8Nz-wpu zO*d6+(VBAP(!iaS6q_o#v_hZ!pn6V*S1AB|C=DgF`|=hm?5alVLqHYFsND8iGC28I zLrdaORls+RTr%U(ij$+ZO`-jlRxiiYBYoxv0GB1QbBrHu&tWaI(k9}wgu7NiHkKqg z4xgYi_1qrQ^_@=f@*&%*tT6kV5iLYYQyr_Hw<{K!I`vNmIWbDV%+;BIDwPt<d}mQA zpv%l+=6~q-Nuj?-Z7c{g!)mst`yY?-s3YFQ%>NaGqGCKU?YX;O8F?+x#*8?ZI9BEx zrK^V7z1j@6ww#slGT<E??b|UHvhR#?51`ENyj3DV;<yKb&asjm1(T#J745|cGdnHx zwsfDv7_oq0F2?<M{+xaoKspu?Yc<;%DsmJGTsll{4BA$L4Z6(sU9JH!Lf<&s&8mAG zK{u8l_a{=AISr6Pp!VBoMSv6-1*~rYq;TF0i9&>(oZPVG*f_cMM#T)m%B-81e*hY6 zwb5R=lFt{jHlx)z5jczGO$}+s6X$}g9ZOGw>3Zu^S>XEEeK}R^fj2DP@4Av1#4Y_5 z_pbJ6EokBmA!bvvF1+(e@~Upuc>#7HlLvFfC?Id%eQ#iqrZ&m^GpjhuhwCNb)lg$L zyrW&*wk@XF<osw_eK&UX(<HmE2&0(_PiOyp%30JqH>Fa1jv%f#Uc1f6%wt>7wEIo> zt$T}cp5zrV_O^YrHcYZ0Y@tBf)whqQL-qIdJsxqkWXMH`Gu3R(qVyT^5PoSv+vA)i zW%G{w!fV}rCI7Ax<+rFiJxAYgZ~ax)g7&5EAtO*73)lVBTr14hy1IQ3#;ci}+ZnX8 zA~{ff+SLDUl^3C-xssggKKJrKWq^N?)W}G>%#>4?jcku*HY4R;<byk%s`JCRdyBys zoKGcziK|#EKC~X0Qq)%cdt}zC_{Dp^I<Kg}`bwY=60qg2o+xn*#ab0a33M1N6GY+X z7FyaO<J#RP+s+!-`VS2Lkd-xFsTIA;^-dq-#_PT+7dhRO(0D<vU!Z%M5}3y)Yk*AK z_vyu)w_kynculIsNdK#l55lMQl0<EuWksB|R4IoyBHCNZad|ufc0j9)cxMhRk!8|@ zSX|xW@&!M&%M?*Og@{(pC8f{flkK{k{);!tDjyMdCzKi$P?Z<VE^H6#{o>P0fv>po zJ5R*uK0#iJgR^8IZ>MPn?n8CVB0-f}S>`mlP*<sZLPGmMgHB|{&K6#JO5i0QN_#cN zPd2-Ip9X%hOsVu%iO2e?3ybduV?Rzm1tH7nJiGm{nuTZJKb32ozvr}*W%8x;X>@P7 zD;w?kn6Ky;U*u)2vTjE_c4)nmej>L|@2qa8)9_i@J8lbcAn>&-bmox7JMr0_oG({k zQTNp2Wel}t{S~SZ;`Z1j|3P1SKVKjbe_XEw0B%f2(GzGpeS3|vTV0zPp?W1EzjkZ3 z!_!iv)c41iXIi$>y3si-4s2~j^W^o>PN;~U(C@c)t}C6|5uaXYr-Xx!I3?ibVL)(K z(E#`jEQ*j9jB)ZGXHCP>-OfhaW3yy(S&Yj*Y*u?O{pj$Bf4B%x;qaViMJGCD`)d*+ zNYQQ@v!?0b4O7y2m%uuSnq|4{ym&b;Xid3?`|ZoRJ1Ho(>~79VgU|1r;;K&eHLq*D zubEF>n;XjZY`j+u9zRI&kFeI{$h&aBV-Ayz-qe+yMIYfr-4R#oL0c$I&;BrfE;fIE zF=J$N{QP{t5;yxQb5o7J*NApb*LX}Vxvx_v;lof`#EbrLKP3`Jpn}l1vhtf2yg|3M z^I1_n$Gbg^bQVLr`gT%ii9M7N*708AlIQ_g_}8D8Stv#KjAbM)m~TyM&Py#fsQQjU zlo*F4484LJbDz`X;g&V6jV{LJ*Qp<_)yg-|9@S}mlFd}NvuGhAN+_d`@$W*W$gJfa z<z_eTKZ_LgGY@Y#Dx1kAjkRyJe<o){oH&3yE3K9t@c;{s-SlW<1CNCaig&qA)W*VB z!&G!mN?ICS_cLnTsZ+$Q;5gWqATWQ2Ga|o7tcMxF`)Hqx9CO>*_K8<{yp%=9#4{~K zSr&4;zqXP>F`_-n*3?|7t)H_bn%~e{!IL0`3PmdN29ioSoP0!@l~i<uw=*;<{Z095 z%q!vf<w1<Hm_RkB$^cr1Jnk(Sb>Ass*y@*+Ok`!|ZRofP^xnxG4*S~9a?X(g<En9g zCDNy)%5~qByy4B^Awx5aW`a|Goo);dEv_zQi%2KpVKhCx>PoqS$ffO}5CFszb~0^Q z{dojcR#t|rsWBEGcGtGW2-U3KyHx5k9xm=F#%-7e)yAy;Y>tlSd0Mq?YlcowR}7Xv zXESg1_4lyzP+pVT1CRDA-%}P|58vy4LLKnYx%7aiGMYsD)|yb>Voq%t#*fmY0;kro zh;JWCYHAnI<@ZVmwYSEfc)llN8i`-ln%YTnl;;cNIa^|tvs#_+Mk9{di<=v<Ix*<c z+xUVxKs!}RsxM7BPGsvt#KWWWdIi~ndlkW9gv)gm+9HmZFz1qbi-tRA8-;lMv`!hD z=OA}npE$C}DTG{L3|FAsPiFNH>)WP0JW83p>@YA-O#ABIUgh-e1eRMejf~>dol?D^ zq|rS$m}NT@^Om`)biAuhCNn!|ygy=rmTLHAj-)mTX2S$${UpXd1yNo`JHM4)+~DS` zYn3Apk3tHty_B;-8PJYe!}6CR1@SL+W`;R~Mv6pEO|LC|l?vF1^|fr3P5CVTEY!lT zn>KGMVxbGs-VrN&JJxCouYW)dn(CtHFfNg(9HC~NTfJRcwp}ISJMYF6$NoER_(6XX z@G*hTfaSA#WW1C$)0=G%!iZ$lP+d@6nFD^iAvRiUL*H%{`jcv8iBCpzr3px&vg07H znK;<`p4YI#TogQGl6khov1bEC`!#84XsO0`$3{pZ@FtF#PsYVI@=-dkUFjxrMl7Cm z#Bns;erl#xGtOx~f-tFaLQg%dy_>|cB-TT&dY>|)+F6}diOeZRG&c+8!bcnd(a>Ly zr1PVIl25;15jC0o9{ds2JQNEFaNb<Ds#)i#d(sY-D>V5Xm`x8*YdKHKB)R{%UOVZ^ zyWn3<Y+ExT=(_5gxLL!d#E;E-?JSf@4dU@Izx0oNy<x;wrLy<@vS%2IRptvEx|k?~ zGF|%j+_EQ!^^k#+kYJLhU0B|yJ2@>*@4LQe!e($E8`)Z8Pk^=5fvk99jBFkiPPwmQ z6VL;iT8kFF5T`P_x5>TFM$2cvqx{f#ukKXyXAObNx7FkC<y_NUjh4cpr&5x;j@ES^ ze#iK6WViqm`PD~nb7=;#p81T$+%<AaW4g=91e4zZFNyN>&$?%!VBYU0we^Du$HtTl z^g-xq&tyl^m#13CR)(a*O4l*QzIH)h?r-QpN3PyV+58#j97mkHJMZmUvUXG8-HpC4 zV?CF*T4Yjsr}vIUeOn4Mok<IdIPJnwFyPhMRgt!r{eek=4bx+@;YJT08q{8P8H0># z76(JOroS(+<5rdvqMnzJwN#{_5UJgCr1yq?=Q)4pR)e2D%&E2IJI>>$s1^`Vb31}9 zo~isVOfISK#m65G^AvS@crBkU8zJp68lIVE>c>GMDsC;+WfwQNs@LJg)T{Zn_tm=* z*!qJ*Xx-=b-O+ssoggx^xIrbFa7zn;GURV!9%NB8zYgxhBtRD%#1JXx?F`Xrc#NsI z2{Y%jZQHW($7_^T7Y9;OX42&YFl~FcnZ`!@n^8JjIYPEQmsXON<JR;>QeBrq%H5}* zVmX_#?$6JQWM*cj@m0kmegHk#7C3Hcvd%`j6plQc05ABE2udP=L}S_OD}S%3QyYO6 zXnx5!ag<fr3{po5>jzSfwFCK;v&b$Ly4)x8x&<clIZU!k&opgk`*PBJyym{8jqa?K zC(G(e1Y?R2*C?LhLQyodDLq>@^Fjean=hmxlqdHt^R(f<UL{j%HJLyO$+@K~v+TY- zo6Y@M)qPopq=?uEhH9gU{FO7~iWtJO9sBU6MeH$~<@`&O?RLI^@dNWx95y3k(W2Rb zNHvXa2U2wYc{?+-QMuqYzp-DY&mk`@LCRKcx~rNy12;l+N<$sO;KI=9$yK<uG+6q* z6^r~<-LfSAVuv_IJB%7X^Flfc-e#6FJ}={2ZKvd28#$bHzyphv_;^O^;%e@=5>aF3 zOpJ+|R*ct=2g5P}iBFQRzt0xC&QE%(%6G*B_C+!~eGqHAf_f%5p7#mveYS{EC9m}g z=8dG=>W7MepPBP*pcnRk!M}OGT579W^MWb$d9txN4Tu-bI+w{i>vbtFpxM<L1^LjR znw#RW@mF(7q;l4wv7JV#b(Q%NCw*m>2D6FYFIG%$JZqp#nC5sYY=p&tT=<5==~<w3 zDJ^U~K$AcIx{_C5;7f%ftk*g|r?Jc<pib?4A+APDwVRME<)tIt|KRNknPY?~EHVX( zZH1T@BG<U-Q3&GK!?}o{R%=^~&Y3{KUkcy&?i1flUL5usC2pSu&C=fk>aj)8w#8I2 zyIIQv40=#Y|02)~l>#P@^ng4CDWu9V;%Bc|3qzIr^NsO#Y$w4X?kpVD&T2y9WIds; zI%mRR9WPDwx!I)VyNZk%XBz94zw}B*`+-H&Cd3`jSL<;x2n!-wI6TXdn01nQHpwCF z7VId_*fTOvfT8?ciHW#FgG$2K$UvP1u`f4+nCTfCVIu0_2-bHw3@f5Dh`_aD@awN4 zJG&m~k3)y1N{>4E-85WFIGdg}>1~mEQ(U}F7Xuj!lJlGoK)9=KBdfJ{CQSksxX349 z^XfxY@$U=aDm!eLh;ZW=tKq>esE35h*MZe=&9}c%F7i%Hi!8bBfrO5-Xe^0-z)`oF z=;JXTxY%<-A^<>t(VFi&>CGJk1W%H`UZ-sFEn3C!a(~%{n&*o!&rr2}Qhn7Xno6VJ z$D|8!!(vlGW<)A4)W$#4E5m&lEC@Jt2NBc>vn2wOcIz|e&MQY6(^js+*%vS3e|J)< z)^<NEAbKg-9ke0Uvw2#9Y&iKGU_a3HaOB5c9l6-yqJCy;wUf1Y|2;o*^-kE$^*wQx zzvgn_?z-R$y4<6j1!qg(ke%7UdrI<QJM))i$O%X4q=f8Z`u5kn{#kODwR5bYGvL;` z#@W0;o5<NvbOO5E4U=;amOa~%8Lb09oXW#tB|hv@AS;4Q=|I<{LMSI3Z<O{pHgX1L zhVA&o2JHQuZ9k&R3%^-PW1oS8%VBAwqxO_W%uIv@<;LD)S&XO4Jvid6f={_)Lckb! zRN#Z*Dy*Nvey5x3Z`IouzOF~sjg4c_B8Aifg~MM#dOI%*FUX$dI$MkJ-Hu&4t+gC` zSTyKS&KG#zB#xP5-WzWvvugRsDWY5akup5U1D*VhLqB%39%&_+gO;T1LvfO)mB?!u z*_)uT^G(v!-X2xv6zQpeZHztuYftRxnic819vuaLUq>MmWE^y}tS=NIF6+PDt=D-B z$_?QYuGHgUvbS^DfNB+pDENXgaps#vXAQK(O}^4ko2~fDu;$(Tk?8WP&PQ&ffx|j& z@2LNT_{Vl$cAkri*d9}_8SvB#i@10+0Y`%p((IX&6t^2<9@FhRa8wpW?0kYpx%;um z!mtq>NOP_R_$o7b{spTnY+Q+fp+>=(XfcypXpkxS!l^&*BS_O<A-L+nR+t*Ln#2RY z*@il;eI$3}s*>u?{g($feYn#M4~a`1JV~l|{i}r5pe*RiEHm|*cJpNvjq{l-dd&Sy zfGjDxm`wQ88k15+dx`MI4!HD`yE}=+ArMkzziN*EkS<+nU9yt-a_3V)8pK1kNsUa5 zGr3K(@>{XmWq6?aAV0MYf_i_cWBuuo@dF_@0zeO`bJ3uu%DW)H(kgiY#b$1zI5s1# ztHv))IPSf%Jw@oNiB`o3X_#Tieu*C8-Gr{5XQTQ3<APB^;0Y)5o(X<7W>gVmmu~HH z%&{#>=g6?U5_FWbLy>>DKZNHY<RstE*E^Yq4Ia%L*EpW(9GRJ+l&j;$op)Fgduk%m zh*C;l>fxfF{5GuYjjH~oyzHi)6O0A|aK)UObI-l&wIfmsU!q(eY6}z{cy{az2MvWd z+<Z|a+UJ|dz{>WBz16MezzwoV-RNBWz)CzJ;v@`R_kk`K=Np`c$xaD00G*`ewHxQ2 z)gz}e=8o+OpG}tlQ+pP|wuwChN_X+eRX}pTI}G%!*bhWqH#av8t*?e3MMsEa<(!c# zF(Ko15WjE8`11^Qrt6=FeechgX_T+<*X+QCU3#5~1oq;wiBn0^WO4QYrxX+NXAa1d z?GG}Al@thsvF1*Q1L?3Jd`3T&hU7dK!wUruT4ILLzQoLzNA!D;=`DJFIrP-e9U0(g zIKrUFb4HICG<{0b3{$86G%V<-=#EQx@^(m&+7o=oKsnsj#aRNq+%d4V+;tzq?tMG5 zZo0t00BLC5rh|dBOI7&9BoAY+U7Tn3{}g^NyR30)_DUfxW1n1*kx<}CKZJ6W!dJ&K zEB4=E>{ITps{fC@_l{~ZTib^fK@>!6fPxeoj8sJt>0qHKMUg=0O<E9;-ifGyh!hK; zbfl+H6M9pmh;#^nKq#X0-a^l}<D8iR&dhs$=ihIgwOksOJb8Ax_g%01+OBraGky91 zD}@7~le3ushv~#{@)B3)^qYB-X>EuVvDjIu+f~>F7B>w3usU0j9gshUJ>=57y_Z!R zx9aaPA#W?VZb8*5n15OtKTBa}(lp(#x!#9ZFE=y%G6k;a{btj&Q8}I_y>xM;H~}Bz zr)d+&Ea=Pz#cmdM8-DaI^jgi`+8B}HDK6sa(SF=Zm}^zY6qI#yP<Gh`j(Q7>oEPiV zp-Dbp+@aGaqJTZHVw$C;AXA3)PBt!I=;N{~omlr)FVnBDNhyQDN)=ui1Y@1*oLRTX zhuRZzg~Q)1-nWXs!L%a7XeIs8rUKDE{lt2H3urbbfwaTpxZ=nZq5h<U&*)Pkh6to+ z9?YuRT>b;~{?;fL5;YHX&-~ndk<-@`NTKWEGwI*WiEAI;oY#N`3qiXHmqPha+{d6x zTI~lJX8Tqcye)dUm}0upL@K&^S#>zv(?A*m@tu)m*+__#c-pYVcs-hN+!YyzGtd?7 zt-uERH%9v=hTCnPbI#G`EcLw3b)G#QSyDMJ#=crbhudszlmzBSKG1oaURKnoM5HpG zI8ldqpO3-Z>TLv(uZY8sx?7CxDO1Z+J!y^6L!~zrB15{c!Hw;D;7^iJO4OwxgW&R- zX`eTBEJ}8rqQgFN&pc}AN+V#O7d=HhWPML8-mVU*L{RlV@VCN{1vykD_Vu?{>l#D! zZ5)SbH9=NjR5G(I=gV=ZiuwAZEjXwoeU-e`;jL@50`vh$y5=7psQk<00)Y`Du#pSK z@2(Vvf*QBmV@p=51If1&l9Rs_U1CSxP|{(Itds+lP9J?|9Arwj6NeiE3HPI<6MSxK zMa|x-$GMds^M+6hg4{d(8kt?fg?h8X-L@xR#jax0rKO@)+<;1d+39V4R%2(Rj6T1< z?fq}JBTJ_54?I^h)x3U?pr7IYsz|B8%eZh&cWbdZ3wS()?s9o>Mf*=XT8)ai+w702 z&`iafTM|yO4EC=W)6Zgk>TF13g7hB&HP}dJX*%f~dX&udZGjHi_Jb^@b}lO-s?S?K z)NWpjH5gFgyf?Ux5RH&QYxQWUWPgTv?#Wl0v2oLDCR<GAEYnKrO1s^Z@j)cfsHaTF zZ2nAuAqJ6|gv)nCR-><o<Qgi7;La5ErIq+cKG)C>CdM^ce_?@^txnI3((j``+t3rj zcq6o;OkS;{Bz@SkU34)v=b6S4H5}nq@z-nHmib49Y?eV;N1laRtPI=$7}OW(MrR5s zrAy_Yw!1=Q$pCJa_OmPSbcbXkPO?#Ccz*0_F$sAN*FPUDpyDw@mQETWpPOG#c?mC6 zcpCti+4D(@TcnrjZ~NAlhCHMjBJbU;Rc@CuJk4Lid1v8MzZEX8NsB#YSt1m(W!Szo zvbb{BxUaP*QX@?*%o~qwcYap552=nP#H@mAWpjls4kw#_eOHNS+^nf-@gyg!elZ;D zdYY%AqLLwTNnt0zZe9_1wj2yD+%DmjFzygK8{kzr(LoFIKpjBrI24UW<FI&x9@Vub ziJ9w(t%`{_=-xIl$6+TrB%#TaM$?9!9-XOIBy8zs$}SY^D94JlYXHjFBY$)>gmYpH zub*GTnOfSLE>+>CE>!DC5{B2!Odc&O%~kaz93Ept<$Dz>G-r8>UDsfp-TT4sVLYmb z{hrwsm*}3VkL&o+xyX;yN8bW%9dMQCXM5Lqfk+Y`yyIP{dlzp@Kl<>aFYZjS^RPav z0qfdcBkGEB(FwLII(&my%ZoJBY#9vfR`BK%ooXxvG>>VqP3PEg*5Bea6%G|Sv%yoM zJHs3t)3U86kG{gx93lFU^;O@Cxg6<|!Jnf+@8czTZN$ZSPOjE{8tyb0i#T-!;;e$Y zBNs>t5!mLI*17I2ak&qLrh`^OUV?~$?#L%vPGx%hOD4XL`2qsLFCFgX32QA})e^mH zl%N5-zmP-1+RboGd47Y_z7mFbCEiJrkx+iNt_{=3B`rH!8+NvmuW6Hf8adr;I$swU zw0Fu(Laa5imBY!G?u!PqqD<(TX$QKRV#zA)geGhu*pdYIMMwVb=mVeM_myiyHa zUvG_78y&+_^^tgvKp~L?{;%+YW7u?i`~#19rU{!2f5w@teY9tN{5l)&x#g;ow>D$J zEnraL3)wK&SU^bOCVn8sbZsAU`Q*mRP-uJS;ln!{V1DER<Dkbu<R4}8#qpm!9|gJ@ zE;1F)*Ym~FUC6P`h-{O09yHQCiY+cKZs(YMI%5Z4?@|3k5gac%)ZvVBEm!YMI92#v ziO-=bGtz0bqFA2+b@2pc@y?S{%HxcvYn&ZHKwJCfzh0o#1P4+>t;03$2s>vOc66nu zc_Pq*#5uphXMK%4b{oBhCBI0lJ&^t*>Ny>f?!c28I-<)WHi_3t!TLA@>Q0KN_f3+{ z?Uwfi4*a-LE0X2Y@U%b;+;RmGu@3VGx921n_!K}3yvq5LkEtfu^$0Ktw5$a<BBCTU zsyU}yqp(7?Op=FPqtZ(q^UEbM*N0DM7EVbMjUg^m@(~L8R=0`MVMH3ABdnew5RHCh zj||?BhE7yo|9WE1#ci?h0Sx_$U9=6krMLGq#2mnqSj8M3-dXzHaEPWYzSoz6+S}*k z(bG>-N-s;(^|qxC3gE`+cl3Id%76awBoq(2Pg$)ySdT3gOk@K6-I6cBqNCAr#mGXS z7CR%VX6bm3rZa?OHKNLauYR+|JKfp&BZB$jX#TPQ%mdiIZVb<gxA|FLNJ;tY$I&U3 zByy+D1hSYVJt0Af_L^iSi+=Cim!-<{*(O$28IuGf@d)LEs5pSE=TR#z%)9d@Y_drU z;Qm!pOs(m6@#sGx0i#nUY8Gk_09C>Jf*_y>Aw)e{br6|;R81sUIp82Vcib+^Pm|Mg zGACiU7O*AnarylGU@QVvgUE*AAO$u(!y2v(dM4~b-uYWS#dmA_eJDz}P{mu;bQ5yL z`I8|e&l!GGCj>^0!!Ond!c)SZ1n+-^!$d`2Ep#2>jnAP%=0}Ev4T!P3|5U<FIgkc# zc<SngOvr9Jdd$hzxp)UmL}d9WLGT#Or}u@akjuVW12%`rrMkKk1!J=JoC(5^%^`5X z&Mo+e=8M5+=s;Rc^vAoNN0uD&Lbld5%P>o_vjOh=5Ka?Xww<%cSms;y%K;J5xJCP% zJDD#zdKdfE=X$%DnU)0)=wd|@Yj4Q@WE;8Js?uy7`oJp9W=!IiD7gyFDuscvG{;&? zk!}Mx_GqtmM$7Q%YZ=(Y%#E7#nIpkl-_L$v75D=S@Q~=GA2^wWa}3D0s;=<&H#|Om zkZn6)MfRj`Uzw)_?trQH*z)oCmFHVy@mm*D`~mP^XbE4jC6ZD*S^sI{OcCfX6LWnL z=s6~#CknU6$R94!srHL~iyToE8K3Pb!A@brNFQ7h_Clg06Yo@IPG#MIk9KU8{fr6W z>_f)F4|u~L!4Dlk5r~@0%o7o8d?Fb1OJv37h_p1qpD1L#z**J%UFuUMB5&q7p_hPY z8!Q+_lJBMD_U)~=2(|9#Q?pzsFZ?M*tVAGn!f{UgAC5t>;|OMgD*k&GhYjA`)NigG zCm*si)_hn3w9F&UPyBW=K+AB-QW`Ge=(_@>mMKM)k?4)0?04_pje<)5O8}xEBusDM z;hT}2S%#d8c7gj9AC&3m)}}apmntUt3o~J8RfnWZYH1Zz2bNkCiMmpHo15|4`nIh_ z?L5wFdJ{gLCn6Eau05R5p_V;aRCWtIAi~*CBdE)YT{n#D$WN%WNS4;HoF|v+pUV;q z6D&wyO)`aT+<ogco+xehOrx^`>PKuEtJ{(f4?c<dd>+sOIx`t=_;ZJHbm%Z~x1?)v zh8t+7Q;j?;VHVjOgGen*5RG}mTrOmfV`Pt)OKT^|;B+9h(x)HUiVO6ogk6SNwSB_J zwdUQw@o7rVsHgesJ`eN8pqD2-Dc-HF8AMlfP>jXLt8uaO^0SyQJL||O=lOTd9~`}3 z(w%OPI8LiUjua+}e}uoPMEE(mj(;Dq>ullE9l5(MDL9$bCe3czv5}^=<kWTfB`N32 z+BV;Y>xfe2^pSR?me9!ZQcmUqAyN%^0<p&$h$XHPhB}R@)#a5Ia$<IwwBZ@w^U#L* z?`8@QZ(LM{UOm?IgpQ%2Shi82zkM)$X6)HMB)e<<Z@94LLmG3{*F$^4KRFPG!=5d& zf1KFQG_KcB?vi3ZXJhR+@HT$qp%<Gw#wC?nlRO_;aed^Slfc$O6iw}My3jP_;Axhf zQ6;5KPWvjfsH+3YBJ7ycyhuTKzTh_Eyax@3h;lAJj82Bgu}ivTAJ+qNR<Su{=lrAY zb%JfOxLefd+#74d#GaXon|OU(QJa-yExW^ncd@mbQsq?FH;tvAfe2O|<|C8zT|-6Y zB3o8z*D5dyiJWFd^e93(@72}l0_%qrPdkr%cNFs1xES2A4{0E-Z7QRmY68#Au>p1R z!?2kNA#2^ahf>!s7x_X)!nSw?o~`kv{}$|bPDZ?!5YfV$Jw+Uc8DX6j%;Muwfsm@J z=~*&Qx?P^6<7{r&@QlU<C?HYMkTLxvp7A6|DSM`bML#038XaybA#M4}qUN?ifzt|g zT3b_C%NBK0QGUI6D<3MZ{WY3TgJk}E_4}*V`y!LwtmPh|qC{h%?R(q8-GbH?)xNE$ z%im>&lS>i+;CuX&z5CvbgN*iNv~Gc5M(wP}h-OM>dFi7dNJJ@!7x4j#pSRA^Xuf@% zF4>a;NT&;<#xESFLb^zG02G$q#-KeivwlQt?DWBq9oVQM$~{7n3ZnFDHEdgddI{O| zZ4|hij*d=@?)cB1H<nMX;(C65DZI|4NS6}SxHdqnGDi5NW<;v`y){{SQ9!3G9M#hq z5mCY3vhG`ut5%b9b~29=WxAOKg;Xr~q;c8PMGtl->a3q*!Ff<Ip1N?L_nN%;l5d~H zX@PeW+ALj1x0_+=15iH*QgL)RsNi2vS|or=CZ8lYpD20z&5*o?Po9*~mRO?wF{vt{ zX)GeaOojZ)ng)8<5CE3<mEiql)BMJ-%G28DIjw>TrKr%@cse?|7@?lDyf*7L@w$+0 z&LIG$9-=hk?0pv2tOEXRPEzX!wlU@j1oxYOfHT4h3JLboRcDt}S#(>yCb-DryGZvX zT`#(?#@=aL?qFUA0MHRM@>BGMtr2S8;}6yd`0`<QOI!#@tdn&BRwO<TCdq$tgmKnf z%^7kIKq^py<_n)b6Eh6zzkL&NpMN-#9W83t2|&^6L~5Q#annMxx;RUTEJ}NVId1gb zK6}}1?*kxB1%Rv@u9G#l76lmiiMm!>K+%)>1frfzpVYl1=O=m=XxNd45A8ndk|hj- z_2GQ_BEPi`6%oYv&OCXd0Neqorw>K9N#6O}m4;@Np3Pj+j~r(DA&8ciHGnwfXgV)Z zG9MY`<<b+pNSzT6(zL+(yn_ow3md_R|B)4nOE~-0)hR7*i?~<IwEE68^?nc&Ypg0S z30t;sjf4T!q_UJ4o4pR&Q^V$m_H(pwRu<f#8p~Xa(mZf@Cvf&W=!b&6@$L3@0_vmT z2$*m}UL}AGj`gZGtC+pfTey2w_Rk>rdcI9hD!|9}FsXd3b;LSqf~YAJEQ$y9SKIAr zfv6`kZdL^?E}o6}zS>X@sp7jfgfh<pM|Li@$j_f|ERD8SWqcpy9*qw6PHqf5*hP$- zTr-ju068-UL{zHdoR(z%o+50(&dyO;E-|o#Z-?p)^yv!A+{PSSQU0K^^5gjvqDQ?g z*%{csw9oR=0vU(HQrFy8uSP5~?VX_v&f;s__Q8e74xp!oisFoMn&j!3EmZ(neuXq% zU!H2OAg@<gm_Z;D>E8FddD{tZLJgrI*4Yb>&FF>U^KauDka6UnLh#o#eeFdnoRQ1# zF%pJ3+cKRL?BjV#w~T{cH}Wo6Pr*be14swosg%whZBGkze0{CI>Fw|1a~F9%#!nS@ z@KEchP_Tx!P&_NC0!1W`b%%8CIGb+28J&?pvcm34CPH-k^Vb*CWY7TbJrQM{`5N*b zBeXy;8N7@vT^S7E90y5@wf6X}cR2iAsw#vFk%xFjiZN|Z$^5+p!wMf>LBZw6p&v?+ z!^7sW*X_?vF)V6HfovPb@v!Mm#QhP)5a4C}D9qK0q*`VE;_&q|3?xxTs5HZqlap@& zzM7^Iy9JrWmYd_i(^@|SEpjkxvkkH+;ETCpp}L+k$?OGi+M)Aa%dOr!4iKm!9b-9g z$h3w{M`a_uJMV&Y_Z7`C+l<C=(9fG(a_XYkR*q?{@OQxnE_kFZu{a|mLrFkD;NqAB z?al$t-v^5<9pbTn=>sT0G3-|XDEwE)vhSQ_?v(_so&1U)gua0~_%p$piiIW#La{S) zBoRW71fco*l*W)AtEulR#m*D+eo;QV+d#rj_*ULCm+q6|K8C39NZO3OWT&2L&@_bs z{h&?y?;YGhcPFR!;(bDiCEj?-BT+v9`?3i%OYA`Vex)=CNa`+6-T=@)`tzD#c%>(@ zgIdcxmg-9wFV(y{l?1?qK~|?0Kzr!z5|^nv-*Uu2H}}qODLUVhq`;^x+s;h?L|gWX zAs;g#)@hP8lpG@LqSE`cl>fk&W7%S+5KWuIKfjxdP_I+Db9-s`b7Be{!~HC^x5+#O z9Q%d`SRVKM$!<S@=wwkufz+n^MI+Af6D%weoJK!-ii9!sFkbFGILL#<hReGio>$_! znr?-^E~r-+c61P<@#>i$g8;R~puX<BRADsTf}W&5F|`~30gJjs0PJ7SqABL<i}F=I zE>Tg@5hAwh)yX}qJNjqcFM!cx`AaN_N86o2HL&f~0lCx<yhfa`cM%cdjd}Dbs~Bj7 zUCGq7w5PXtndy<X1WaI$cM4Us>CQzu@FVsKgatd03eOopZ2o{%L+HnK6mgsySRdVc zcwW(5uCN!Bo;NdB)B2QZ#CxB`R)tgT7x+#aeFK2%1#XS_%PUuRfN$qjfpGOPxSKn_ zuY{Qg)1txdH5@A(M<8PuMZKgAn|xjzSMh3ie|fFJLORJhvnX{l-`yZM3?i~RTgA9E zT`~j1XX+bFMQrXGDL^2f^aWxqmWZnyK%mV(K|DikWhlp~IN`nbVAq;?#T3t_WY}h2 z0%8-|4?Qya@`*lY9&bWXcGt)a7k$A8%=8~vn3%*yl0s#+u0M#nEwN*pd}Bb%TvXo8 zXm)mhdt)EE#rLbRyUddmvDsCv-V`}@YG24sb_vP|`wl`2+YP-tsN#wWp(~w+w<8i@ zf+3GR)*gnk(W7+=g`-)Js7J;S&sPuYP2`Lgq`(PVsM?ts=L*vU>h9~3+013?14fr` zgK_!RQMv3b207M@&-MU2nZ9GFzdTppn4{UV;8K)XEuJMU-p16!`!)Ts<ort<XK;^L zKTX1{K{_#}1tF!GYoAl=?+0m)mx;gMSn>TO-|6<$)YQ__ZxDHg{lVK+gKsItvtX%; zDT+Ox9aUs{^BXYRSE%{3VVr$ktHN)286Wx|M(@Om|7&1eaB39mC=Y-$punu5OIh$u z>l)(idR}ByhF_yVcKz-ddr@XAI(*<hurb0?lo^jw=#+BpR&}A_j@)^>tk>@)bl(l; z>^n#;LvQTD1=1rZ|DiR|t|Tx7UJ~mE5x~G)3+7k7x+|5~b~;Qb3YK{3=6fPLmsdD( zNMQo(>?)OuZfRSa`iQK{;Jcps3;i+Y{!QR0$b+!2RLr@PfdA`wVZ)DV>3!n%-*3tH zi6L|gY*iEY=mH3Q1_*`Cgm-r$IsjfLSkoah7nkRt|1*RQ4Upd*zj%c-#Rfq?d-3DJ z8!*PE)_>nv%I<RgPR3K>@;>kzKwK@gDsY;aw8vbdkPB@_A+h1RmWN9O821N54foH2 zbcq>^GLsw{eiV!)4qc3ZXq#={<?V5gawXz9fjtU%o5EDdDJj(%(5Nx|<;F$?N(YLg zqsiX2B*~OX!D7VjP=no5{?*JHE32dw=-AplvhY=KEqB-N|M??#OPQx@_fnOUmM(VI z;=zNrfIr|}>poMwcF@b0F%zgxgWXq{cYwBil~@r4x^sX}!-}H)3Xf;gr!S-7B`;u! zkX^t2=bX6iRoXhj0ge|@Sa?0<Qe$Hyr5A~!c-w}!Jua1Wf@hIb->{vxn7R-D`4mOE z6qUi;Ol%+hq}-|$%GJ#PoFhMq?u+fwxNjyR<R7iN+uHrIT47<bz(<RLA(v^~=*_uJ zbA&o|2ig$`gHpH4rven~r8jX9O1pcg^xAJ1YmL%&nW@*5^0!1ArTmTFI1S3*xylKy zGkv+72$XquWvkw97vPt?w4FD?-I|K}xS7vot;I~AN{Ae52E-ZIa3%0EG~@EW=@%Wa zUl~iomS=#Nd^iS%@WgX3G805hcfuj0hbYk1wrg0wezc)thECy-kqf5b@>Ap~SJE^w z);c5~`m>di{V|Lxc!JoJhHsTFyj2O;sABLia>jwCesS;J;-*L;r|s}?#2lfB%|VKM zOYcSQF)En<SP%2EMeT_3{u;=tz(7`}$8f_36#7VX|2f5(?WdZHg%VDD{>|K;6ND3U z1FaysQH-Vt<Ac>o1gjok;INt6S;*SvWXN7SusGS>p22VJw<jtpDmU>f2K0e%JBxKn zV5nkZsP6WQ0A+qf69eeFgcTC9v+n^QbdvxQ#kyx##`3Qvlzq6j#2QjyOYG?F<(G~& zN&WK}{F>Vs#l4aC4B@xG|3sTIrt`m1famoHDoPxQ*{v!68g+|yB`<O<D+Odw>CSE+ zEKr_TDfpFh(gEDr^`|Kc`WRC-J&IWe`x7V(z^kJEvBX4T=Ocekmy3s{*mWk8lJ@h? z%SJHmG1{dq6yw46Ep|IT<V6Y7QZ%*T!7dxr%a<=Z+S<;>H{(;hb1wg_`~dA~P35wQ zNl2(H@}X>`-UP?y&M(iUxC@;O+O{Gqy+w{ixHBFUyjSwQ1fX95R1O(Kp9vae(!^!y zro>MC{YxI^KOv?d0GzIgWlLsj#S|pF#q!vcC${Y-7_%hBw9!6``Kk|0+t;L<JwOQA zs3)IVgXW!>)Ho?mP0)Z>?{D5N|4++gMFrATS~GoRv76u-!s=(4T@vtnF9!V3d@&6u zn0l;?Nm3nfJO8+vNvqD*#>^N(kN!vfxXN!t`TsR9=~yvG?)ZzNyGUp5gL8WYc6~nU zGWce@hB2_-=M@G(YrHzpJx+7qZ`<3dgk1LA#YOZlOYPgh@*6+@qYBNnxmr#OpJ!HQ zb}VEVCAJ<qJqh9>YXZiqc&>&`#J2Z3yO_h5?y3-W3CyGJ++}j8V}W~#cp{>d-9sG2 zz#Q~YDDDO_ziSE&l<UCU(JuBKU;3BShILZ`pGSk@jmQI|Qa;eU+ZCV$rT|GuAn2fV zu)N=ynGMiLWIG7#hq|nNvH-TSqBg$o+><8-RGMN5g@s++W1zLmd93Y%9b;wRj$Qs! zra_W~X|%7b1jPPRn9QQ04-)syMz6Q>Z{OQGJ8;AWYx@xy<+GpZFXQuDDD+IRFOdMV zasX9x&4gm#xHx`wcv9GjK;FtrnllmSHVfUEJN(lj%2luYjBwG%0NHJFZUtSW56xsO zukKivun90({g7;myE1N`(=rZlguSRJ(ga|^SiiW3q7CE{Kw7BD27p6!VuJE^2S<OX zM_ECz1K5NFS#Uh?z(sH@LN0=6dE0W-!6@_dw*$SW9srd1v{SFxDPyvB%UrG#g4Cqh z^saw*QA69=_^uI-<`|NqqwMLROum3eN?pohkqg6`#*W<HZ?H|lxg1=nLIC234$v1D zQ=+yzihr0&36h4?b#>WJDC$@El$kfjv180EX#kC!pwWe+Q0I{^I$$EQrBs?KmAq(z zUCF&~tJe(VIu(BR^LESw9A4#L0!;p14$;JxsQ%mQ0A~z@#q^3@pJaC^d`?S?p|_(^ zT<~zXEAmJ}eaV?LKz<Q+V=pq>W2w^GdCTc|BJM=7<8Ry7>d!4aqFDY!1_fh+paD0q zef(}WE01PgI$PXr)(E_)JI7QZ?I=Au4pf`a^{@e9aA>+cwtj*<0;>p2Bh8zJL#Q`L z*t6KJUz`fr7oDp>k*9kD)<F{(Yurt7$K^wbkktJ<#N*Fn^W(X!5fld~5`Z1!S-Z`% zZC}B9=&{uGR3c~;(o~|EHN<fHd!D8`J3D)9F5#U)Cx!R~^?n_jSU^SP9L18~q-$5k zv^bNWW%e!N>(h+Z5Hlv-1?Mx_QCa8IDu5$=)OSAGu05G7tpt}zcU>R02;GXlW}}lN z;CXhYl^1Q`{xf{M6U~;0yEV|gf7izR>qlYvC-sO^S5EAV1dqJX<+9s{1U((ZdTlcZ zGMm-*gQ%TB+8$K&raYo%+`Q+JVL&A;Ka^_<kiYz(e}^1?%?aBQ<*|a2KfVZ9V7F_D zFywD_<s>HDH0}iLoN0h}Y3R8o=tussu==LoDdf-9+G$`9xczodLnHa=Qz~Ezv^6xB zjzs8huW^CO^0B&al`zmchI}V(R{!qB&Epv`WOU9e=I73N-uam~!L=F+Aui{h$ljsm zg<&?vn4-jTzbp+#Eu&kX^}k0l%((V_;YBmEFlx$uQsTh?;!bz{VyCZ5<=Q*Fh;3pO zAPc-F94LYCpkVlG(b3VdB})G$$dR&rG@7-+Y&`U+{eqf<9X^wGuOk4itKP>%Am;{h z%e32L`FJ7pWao{XRSeJ=X|1VQfW0G9wptkt-wG&3pLKxX6xSEZ3RJQ9=C+7Sd?!w9 z$cpwZ=JxdzG-uo}3fDY{t`QMN?JU0kxqKH-WM?BNXG}p`5%(Fvth3vbtCRLErAKAz zVDDhD*r{_&P!SyG*|Leu5<*onrBM!<02^)TDd*oK;W7ywan;w4ePp;Li`XO*j-7nd zSj&q94c;@!azQ}un5ce6<+-OZ_n$7$Ma-<6VYih``<#1*cZO5Cg|IkI6&zct9w08_ zitSs`4c3&NeUkskDj1`af&=_^$sbKmQ?AYWYkmLv^jM$;fN0Wk5oGaHKgd+j%5DwX zeKE|{7k8XTl{#2M92w=W>4_ajCdmiaH+^_#ggl7iK2U286h;q~t6j&ZTAmF4<jC@* zo~4DE=C-E{?3X*{qpEc_oBP{V<PtyOZW5eE4&XWi)X|-B!(*)6V<1w)fmTaL3mT+y zrI=Vj8dKR$ikg27nk$-`j-DO|QdDVQUDDDi#^S+(72i&605Tq>jHu-ayijJKeHDYK zCB;6ErAA+USa-yt2Q=GG033}YBE5WdI69ML0nzLSnm%D^$R>2+nc3*e=Sjj&MwWmS zHyL8oG|VWjr6pB%_gjr>$464tRkTTB{<Ig=bd8#fo+IU5U0ilP!{$V-ImOs4x$ug^ zWAuzgEXB=FgseC2ve<u~yX2b*o}}sAY{X`MH3Bj3t}ZVB)O2T*)JOkA-v~$bk@>`u z5cs<A%|dM-kPNm2S-ksN`Xw&ta!^Vu>5he2TVr83#Ikcn_V~--aIi|gr&-clYo1w) zTud$<PYlMf+LM-Fcyp3Fd~j+4j9cr2DhLh(<N*5VK4ktUz)F!wCb2zOis#WmGR6E3 zp{ldDDBg8Vz#l{Zz)g{orE%Ohs|X@fJpw_n+Z9s!_8zG#0ZR6kz;EM*{O4ie_f7pY z<2|RvK#OZDF5Qk;3~}wXSLkrQS%t`-2h1NLp39H4YU{$oSL7dMzB<1NL~@3j8D?#2 ziS6LFiI=&DlL>NoM?1ds>CGJPLA?~K66Qmw&iaH#aavFu+w7kc(n?QHuhT98arnVZ zbsJpCYcsV!%>7@+m-6X|K_wzX=N>TsmD-<17Q~Eq$HTt8$0&mbB@bR?;$6%gq%AMf ze_BYV#lgGz4=g|muB8P9@425O|CI`}O`Qy=a_J>t?nh6bMiAD1^PJ_%hWSEEe(MEY z!^`wlnpU`{$lXWkk5S4BQ%^=E0|ioDt_WYA)Xr4m-WTP)Qy@-pf#V0c!l*^;*dijL zb;8>#fBLi8wnPZ%KHX}h%AzE{F*ZHdM*4Y_-zNlccqlSoXV3%v>dB)0UROr@ha01L z)(`5ZDu4J0u!IjQ-znN02QAQ@(Mh1e=GuXV`<t{uBGQE#h<vzR0z&JS75SX5v)9&1 zY^Q>a?sru7c-8;`6fC`s3Hv-qu4)nz6vvLg5GM0alX}8J#jK9yEa9*Uf<Um@2>sB9 zJ7bt5bt=B4hfsujKsm7(xP4lkGUUGm`_x)#2523NN8&sQ<gcF*I2^7idbqOMHc`*e zkn@C&_xx8L5!dP7gr!I8m8LqkA@udbrcj&_h-!xe{S3flw5V&WH+?;b*Ur0f23N$V zBo<@^6%L6-%d~utex{z;w$66d<i{a)Is&gA4gQye0VFKkxdi&C+0GZoz>k4J4nzM| zM}ot3i<(kmv<_MBVJ;cAj4zq<TfKF4mw~Sn^etsT5iV&z?x0HEs{Wjm2vJAhfB|QC zU7S+a#JVpGXD3O5THxlmRt1dQvp!QHglu6gi~$9bQS$oIM5O+enxRert3COS2xg>u zphMF0o;C8@({+cruxrX}iKmu~i=kzj>k}}IzH=*f0oOFGzYu$FUVF?5U9y8hp`+AV zn=D}h*>@g`@T9WF{-x%(ed02sN|b|?G+D|)r1|c2A9>8R!!mG9QMt22MZA%@;<mko z%f8ukNMD?)%*O0ZP)U2ehZV5jr;Q`Ff(05D0L~6GGXcn{i-)7E3FQ6|)7k~0LEhq2 zZ~5fHy?W0TFJBM1xyN_%$ooPa&$#$Z<1>3TRu5Z!dwDx*ebhf6kr5uXHB_y0-L$m+ z<&9z&`>allU|cWhX31%|k;trjCP?f|6^x!OjACyO)ZBS2{&j@HRDD|#D9q2!fDY+J zd_hVc`t%OIKHx$YQMq$Mv2;jq6ahp8qzuLl51_bRsX(t}rjRG_r6!r)FRpN)D?H!d za7<SX6<qtVpv23oe%~@3r~N6-KMe+P?vJ>%2LO_6EC4>-5rHOzZWai*_;&MV5?Dkg zD|S~u{;*jUG?RoxrstIStHt>iG94zPr_eC7Dz`H;1E-l6&xXlCC{7H8=5mb;PVNIH zCZ;L!GDr;TgR=2q2~%#sNni-%W(w{}VL%1e4MT>H&hekLX42ocFL(7C(?Qg5&x>|L z>LZVZ?q!NayTaxgFHDPC>E?~$XjmoO&2*VMTN+E4p$xszewy_3^kz)QHUK;wJ&)J~ z#8Q9f9{6q?%ML^63mq!;Ow<>`G(Y1{-<@s=>!)&OgR+a-#%Q8-m^AdA!3?6LJY8B| zK>>TtbkRuMGCc2zHE_4nL~+c7jI69kh~<)yn)GV&a8oQBrUGaHIhRLd6Jv<PFo>S# z9RRAl@tbj4JD@kxNzl6z-<9s?dia4-*B!(eaF159zXglcc$xLt=MWq387kyf5@{TF zcZ-u;q3uTve~k0l#l-ois<owC*@sx}fopM3i~+{u9=Jo^$l^}6c3Cb1iel0+>Uf%z z_zeWqW-`7(5Jh6{g_VeUW}VH}P@iN#(;$XaeSb-gQEKrXU=ZK(2JA$+bZFnZHa6(v z?-=y>F*;gW__40J!{*mA)d1y&Lhv=<8Q0Sw%wbE6=D>9d$VmRJq19Uj*0sroUhU&Y zcOOSO_koL)6gCED`W}ROSF}<9%&vXzJn3gN?I|UD)ffLfF&8?gnLc91M_9!^z6>3^ z4V;Dms@}PB^0cAO&P3t)2V6q?kUW6r=^<-oF#?_vzwv`7>awZ4-cYv7l#cg$PygYP z#!~l%hhW-%nrX@(&aTI*(NmfbY}P;}C+>iTih5)An`M0wkw+~N@6SNgLQXsKAjwJE z?OE3PHUPxBwmAdOirjMk&?mvF$I)r%jT3~f!zV#?X`BA}OVqgXs8J>eng^RQi4YAm zcG+wRIIGuj8bv+o=E0nx6t-O`g;lt~erpmt5Hb4&0Z(ZJjb@TSvlJ<Y!dwO0$hRdT zB&G|`jTaBzK(^k<%RC(8#|OHVKg%V31wtT8?OO@7eYk(x%O%&mVkGDQX$pntWe4>n z1_3}#DeFqlRuAVxh7G&@JKp-&z>5Wqj5XGCs>%IZPhbNxE$6zOCE<#=rw9%8sWoUe z?M@|XNIfr@z1FE~X9e;JQ$rKnsByz?l@y$1IOHZzIE{sX?1Ukzn3B$zH=7pQ1W7in zDisUh=hxBzpbv7Ie!381oXts}wFX}odNp$WDDm&zVkGrs&<|!+Y<<R7zsCJW#F^xr zKSchQ4<svp@Q1UJ$m=Jg45GaWR_&?49ky))6eKa9B)wL$4LqkrfTbO46zzXy{X`A8 zYUMs>rvfL8P8ACO*>wUkt^?qPMO%_@!3p}(>h~47&nkHNK6O&l1~mS)KHEMWI5OMc zT?faXBgckLlBa5KWNeZ5?<^kxdB~zH5$nk#B3~{(NVTjDVK;EE!N#}HA@l7kd^W!m z6!Nn`FK3TJ*fJ%p!cL`s5cPd0Y5Sjn*p4Yv<_*FTcNVBV78cGA+|e7zs1P<$Rnb1T zqy<xWPmyEVaZ4;Y#Nrgdr#%Q<B3NgIPqi=4HC$<?_A@nf8>AVr+cNu?B9jdGy5@Wk zWxjc&jUtT+`k>qHEnxTFHr>CK?O#&F^@b9m3UI;XS}UtRr!OBr$-%Jc3BtSxLH%(U zcVo1u+VXMRInHlXXb`9-=Mj*|kPF5asE|ssW|0)BjiTm7T3<z-Ul~wgV8fWHMX`P{ z-k#R~2U-0!IAM9pf#K#9xW{VquvbGC5af)zB%=X0w&sEjNNCudQ-%M(e%G%roWD;| zAe!AyI0WP<A3{F*K<f?UbI1_<z)@&$|0{w2rzQDw#C6wxd4XKomd+qdQ^n#cDXAa? zNM%lBRZOE6KzUoDVl!ydyCeO+aqa4tz~jawv-LdFZne?!Njnf5HRihyX?q?-dB}ea z`7d7$r8sJ93SX#_eb2N}T5K3J3t^}Ssmk|9JwT+c3cxxh@Pefqk(EP!)8|Yrl#a2< z8;JxKPW}^1{NIa!@1di0>y?OT`)pp6Z#Wcv7G??25S=I#(=11Wq)ESg%+}v}HGf21 zyT$rP5+!q&Bn>iWWgrJTW$llQgMo2wd;^(Stk0$gi)Zr;1bD=xm3GhnHwpcHJA5}l zx_{gx22kmv3i>>d-i-jKWZ9i-rpkrex@JSbB+#Mqzf%a)CUS0p>Tvy`ox1ryEk73t zq=<`854F%CTCV}X0ga}%3F!9^w)w)kdyfBnrYWmJK_o*W&z;mU6Cs#`{b~g+gWj}Q zg%-dd^be`+aIF56w7=gR0F?q<S+LVXl9WWKT5>fnQcyQvc><pmYMQlL23l%2IN%<C zd#%YY&H6Wgg>n8W4Ok#C;x>e<M7N<}R^S-rVQC-}<Kq~ov9{}^nsHE3-1py2`Um9- zmR`=GSJP*Faj!TySpOkN|A%jV!UIMnW&DsQkW%#02$}j%yR~!S>Nr4N9F+9Ly48P` z_?&h*O*?=4-`3if3p}p;0z-K>pA7BaXRQB8opN0OLx1qOLGCOlZ=2cv-?Fj$f5X<n z!;bJ*SBe8bHORxw^7PJZ(cf&~j)NCR;ii55I`%xJ*nD3s|8EWOKhB=Z6BJy{o1s4+ z-UW{NkL<RK|ILBiOZ}7r^f<Gv(EVTRn(sR>bd`fwXafN=VR+FFEYv>;$zO{hI}J`| z<L2e2Q4ZjVj}9i<|HnuEdKi3iI}7+4j?25eNe5DU>u1-$+5P`>9egJNCufwDY4}@# z3)xX`tL~)z7xM;Ubl@1!PR|vQ;N6&c$H)KYyZ%k;)WOh2E;O7z{|0E8;eRMK>=v^> zWTuEhkWQ+-p5zG#Op*cuYIf$(|I;E41cG;}o$OZn2&DEnz?uJdL(iokL6=`aRP*0e z!c-6Q#qMk|{7;L>1zHe!kDo<@cemF!fBLW7f+LDx=(u;69K#gB;~&`m(@g(Zu-||0 zf6DED%I)6{;{PSC|5I-NQ*QrLZvWQ_`QteK&vX0#h39r8RCcwoz-o~zo^?Fm(oT}i z#hvI7951e8R=(dRoitzfm0%Ys(Qx>eNSsfZapwu#fV|bXf>I1F5w%)hSCTwj@;kE} zmjw;4h!x=y6FU*DlEqQqZP0d^TAeSfY2ut@>H~?+(>oC{vRwTjY#Uxbr07UKh)Q+e za~&YGegss$j1`x*fm$1e+TmRT)NoP!ldH+KB+E@=mBvFGl87ZS77~ROVPgM~jI+zc zFAg@n{wa~I`oQje%9OseQ|>Zbim{k5OGJf>9>^O`jpS%mAdkA5gYagay55&v12%kI z1{Wg)fypYpe(9lD-mU@@pSN4Xb2j3hGJIW|g{NNQSV^oQ*<E;)K9QBfIJ}2Pe^!sn zyICU6HN`vNCu67e#K$?_i8Es+N%>yz^wceW_u9Mlae3oK{Igz;$~|P#0Tplli@cL3 z0M!0~S4??<>ZV;(bnh~;;{H0B<i=p>ZH_O_&ABsw^lcC4a$GkRlcNTC-XvJa+Qxin zhQ)GpitkEEBc`cL7SU`tts609ojSPo!tiPjN4xft&h^?ff!*0UMal(UpPe3!Qu-l; zPIS|Pg$${5Yt*(6&72vM3k@m%c#0m6ogST&f|ZvDWD_v@^!qjW)}>XEziPS}Q#a)% zG^-v|BZ`~%A)zJj^Y7EfzfTUiDQc;2A8uYv5bW%Ki|x0pZ44~pLT`l*FIU3ak@Qy| zJ1jSjLfg-ckPR*?u!#zFB+H@YW?QNYEK;Q5?Nk?da>W&vIQctQ-gG9VPU^jR{Y)px zFH}vl$dBb5e?We7%f~d~+&Lv%4c2(qH(hzvc2}*N>O%HC{3&)78TXB<SyY7}4NpMi z32?=HS*^=-gmTT=ul0#D8TS9wYHH2lNXOIOtwAnj5R>rZr>;wyazHcJdDrD_yT`~a zZy7Te2ZEeWb*(DH+TO&%d=i8QzFyVsH?=qh+mF3~8_81C&(coE8S-k))Md3T)t3cz zxZrr6?K%GFj(BG1N^}&a_9}kmSPVm^=#YD>2ovAVWXdT@56Y1L`3lxs025ae-3RXe z<M$mn0zqMuwxnjC4Wj5=ZjD2VA}VqWuYekw^pt+9p=kyF!Ub10Eq;8H)D_4Wqtog# z%#56)GhjPWXMMrCqLmPS+|joZrj=%}Rv?7`Yy<D8N|N}DC{JP#?>)~H!EoOlZiP?U z6tP#z)wyGYy?JeUL3L}tNBc_YTU3US)!G6rcI_^^;U`NkV}F0up0F?HxQ+4JOL`!` zbnwa(ee-9sh<%3c$Dj;rXH5#-!?1>`4gN~(Ej1;g;{!u`4J{>$m9AtWArVs1=BGU9 zqNB$bw30JvV)38R?@R|bob)*7^0=oiv#*y$OniuS#INX)B-dX0hHAyJNZl~o-VX?} zi!cylrq+B&x&^X7^&OPZor<RLJ-f5Ch7@XvJfFbL@a{0#Cor|IOjrrWB2n<sVao#@ zE24DM391{R2AO(!$(eH`3m=!|o$5UFmYjN_pyB0eVhVE8W0mVGB24W^$OB{CH>KD9 z-Vju0oOe4;ht&N?J#E=vqfbhIUz|=_2t2T_CSYQDG*hiWYSBfY^-FiocMwTP+%lD! z`C(@SQKtysavdtYb-p%oH1qZC`6*9%Qok^M$yC6~=A~;bSiXoPUmUf;!WW4KRQyk> zjKf|>p*FFXK=NR*@}gGbOGB8FO3F*s8Qc{{)sEh^6YNn{=MA|iA|_Q|P>D!>XUJ() zpw?+BzU(Q0KOR*Ha|727XQmz5CQ@}6zkPf5a9S$elGC8XfFCHAMzqVHZzh0LUi1E# zX&_#Qd`}k8PZ(xgG-OTfjCvkSfE4HloST{(<%`P6o*I6v%`{o}UFi)&Q+JCz3%Fnt zL7%K_@bfiVTpF%CQPl9v==R0}5U$$A1EkUiAM14iwky693(A90Uqh3;Y;`rIB7a&M zi6CpZ;yL-PCOv_utR91wc_wy-2r+VWy_`dwB5I2DJi|k*Vnj}}`ZgR<Tw3K*&*Eun zohMA-L}zE@@XsAkpTTXW<+bPm*7(|lSl8MGleR#y9Wgvt7(d9`e0^h9kqJbk*u>-l zh(;42T&;{I2bq%1_nSR)yoPD5wyfs7=aln6Qz`aIEhkm241ku)b3XD?Cm9VW9z6IE z=XlB&_q^tPaIRtH(8$_*uE27&mqkPT&@;%UK<xpg<3}l@<Cyc3##ax$6PVx@kBcEC zg<g{Go<EQfyFH8q?SKHt>qV7ZvJL`NDXP<)0Qi50%ZeqB?=O4iUxf26Rorg*=4@jo zm!zhxjT|4i-!C;OwPn-iHmurj(|tTZ8$p1ID80p0-|ndw@fo)aUuDH4`eaRneBr!z zs0*vLaHaL~f%b3p<E#vPR_Zs2%tcxUi1&|;xIBMtPtfm3C$bgrWnKyRecC3p!r$!5 zRg!2|i?4IDKQ@>V8h(~?cR?~=tzk$(CvnO?Nl?1~{I|SZk2f0q;kCv_wNf6+9uFgC z-}@0;lFDf&B{CP35OLqW%LYmEfC}vrEYovA^7x)NzNP~ng_2%dF5V6KOtEvNYsu>) zDp@^*lo9{OWx)=DqxFv7XQz~Bz11g7l?D3?Fw0tV<y$V7?|&Dk1^5;H(ArxyU;X^v zY)F4rIsT?Z)no?#riWXI6o=Y!FY7-aTcLN)Wo#~Pps49~-p8!(lAPh=$rIL+2BBJ~ zr4&1hE{1Ry8i=&cy>jm(tzbRsRZ6bIP1XuI&S>u9=v4d&G63hl=T3BieKKXsp`=b) z1P6XrPa;0(lsJWOL&A|?iiBKi+nk)T4BTOU<?EySBhO$QaFX*krQAp?A}G|Y+fr06 zE;&lU>jtgG@!ncN*S;`WO-Rn#3W^7;Kkj{2E`R6?O|a6dqF?q!hR^asfn3Ra^vLKS z4QcdS_)QIFaice0wQQIPKM|cvo+^u#No-Z`8H*kdMmym6wKG>AkPWK#hhO)6;l?%x zhPC<Z!`k?$aqMthk58eq_0&tzh4#G5+1$4;x7?2RQmMs|LUk9T<1;(ze>*cjALX|; zxUYSwdeDqRGQ{+7smA>zKk`OGYA9!?JI7j-lVvj>VK(SM=#rqc<_%p@iv?O8FUJYJ zAgohd&>+=^*pbKUKHEyZ_UuQpIvOBBB98SZ874R#-l$l@b39Jj#I65`!B23wx*L#$ zvsqL0J1-c%Wo0Z+nOY(vnCS7h#o+D(r>@g(7AR+?w|?hr#*<H)IugVjt$-ImXzs9& zyHe(^>|w@i+*If;@H%;<ErA)Lf}dB|iYyoBZdizNl<xj05-LasKkRf_P;TVKrRIu3 zC#nJ~4`<)~ss^Wi`m&g+mKUquEzgr>>kAdl9{;3Answ(sz~#H(wi@aRBX5SIOS%i> z&y`;it+D<#r&E$;Ai{)>p4`;Vsc8ze-$FvsQtPSK@6j%9ZxI1_m}eb#I4P_1yPY@0 z)Zf2UHN3+KBWJhSS8bgRO*2;V%~I2e_Y~)74!6k)CAhYCq?h&Jt*S{ZRyQkIO6#qe ztygc7Z^GgFAMQLgc(C5#^f=OIVSy%U>3vUDf!k_t3t|4nNKufqh{!d|Z)!96L)M0R z;0h4~WRX~bHtol<2>ZAQR%f>v7aN_58$oe&k24L>QfeyrOP+Tsy3(iUc@Q4AS^9dM zeu_Xw^_=Wgoi2MzpxfM~?;hp6du=Oo*utYvL2_f>Uf^`kvd3hZGosu_Gi~7(H0k9} zLXkx(Z*1-NGd9JJ&tVf&6+>R=cLVG3%3=ZXu`*0UA|vGJG|%#@cW&OuqQR7PIxdM5 za1)r2h(hoFlU>U{Vk-0`i%Y#qOQi5cmYOZR#!cN*2Ip?Zho03N8e1$D-<oq+ke1mf zvO@c;Ri5v5v@yXaefLtXonW)tyj6Rp*S-JQgaLcw;()uDL6Rk2F^UzJO>&*?59Jwi zzuYI7BfT@*E&HqGKJ2eNyzisqv!f=<^-C#HTaEPtjGwBYD~C}JrWo=t7or~Est7BK zk}9mnj@6B0g4Kevw)9A921mT%tsy^$KRVXY3Opds{Dxji$g-kGX*P5aESM4Ig(XID ztgco+Cj)f`yuw(`?M+WE*dLvjTOcuy{gBzbR{)`I_H8=z$pMFgW-(ncX_gWZv8?)> z5j7VyE4N3K^Pw1V*2Kp{a{pVOY)EJ$M^bL(kvq2*xNQut12o`a{X}&}nF@o2a*fRQ zp`{dzDJ}9`bKv_SV)2ci8^Jo{mh<7Y;t5{ji{s5AqKi3kvMm>N+9erKodPY1IrOIS zwR-zC>a8QJH(!20yjso1B8r2qF7=5BR-8T}_hm^k(kq}~Vx&J%gi~^@GT$V%Q>K5l z_lUh-ziwI}fCp!WF-a~QVz|LCnepMSE&Ye~!2O!P^f>d9@zgN()|<Gyx;>E04{DD( zK1&2td$FIDh<~(^S?=IkXZoeuQCoN)GIJz(CM;jFSpGJnP^a67S4;BL0xe?AVo;%O z$%kpPcd&6m`TaF+2M)$Vp8CB=5s0aXsLs-6pf#3U%^JSWICJ)gxX+Xi4v(?5x4em! zZ#eJ*so7z<`j+o%9`Eo$?HmKoLigfBbgdnYEq(R18doH1j$5=Fpo?5l!<{8kp(`EG z3dQ3ydZ#vvsuo7}7fij4T1K_L+BEE_DTzIqb3)+ibaCwEzPp9j3&P=!Wj;M)rJU{$ z+2W$o5$ihf;pXKlz7cAN-YXpa+-f_l6lwUtkK;?VSgT6O4gA5we!;jaX3f@pk@Y6! z%a}R%Y+R9?++>J%+L-qjBAfH<oD#1iYg@Vii2>J<W`d-SGkkiJWNXOhJh!P<+?;qn z@VmRT9fQY=j&lXKkI-kFUkl#qn^)B8iy#t5a1VAM0)~F&VG#+emWf(oW<>y<lz)(8 zY>>IL!G%$5|Nh1m(-e-plG$5C?YGO)*KV3t<W)P%cq<fGw*JUCTKlbWePh6}U879c z1RXTu9?u$wfZ)7eXWABdEAu3?xhH`$^`kT%i(eu1u@#o9I^`%aG#9&(W0FU1hbqJa zINo*-$(@qypGlMT*b6*pe0&l>_(U9Zv%lPf5MBOld}ZJhqK929^({+En_Mh1X4OTg zeT0Xfj_m8U<S^xR_WV2NjWAYLRtzcoYO=$7=_^+YpIWz<i$u-&6$Scf67`%8>!c~E zT(|%uTNcrK2d{kkiop@YNiz`GgN%nS{25^DiX$d(50|+rk5Hv`#mC*pVa(*-3U<;8 zQ=;Dy#v0efPZ<Wz(Ap@1OM8;WK7W4=NvqzE+Bef+`h{atHJ65~&aONguBo{Z9!}%+ z&djlaN2Fs3-$lDA!H18rD1aF|R|fR5c*7*S5?uSOTD~F!#;!2^oWg0xqP>C%^P{&^ z7#@`IMnvb8DJ-<NUp~OF-sQ$2g)(hqAN4c4sWF{ZH<m?p>MHkJ%tkOaN=%sR>R>~G zE3Rd&vOU{)?|QaPPt~Q%w4#%AZ#nvtmRtk8jI1E4A#soND;~<uc6HDC?e8mDfgZGh zHX_hbGBxf$GMr{Fg)dp@RyD~5%Y{motxxdc1P}J!oTYsu9j|u#_ExQ}wO>zFe(3kT ztjBaxc+!hCEi&h6MPU=?-kw+qn`O7TSG7Ka7_>`aUG8p9mmIx3A?$X-YLtqvd=;Nl z-$|?6JVECgG7GX7L`W3V#V!szTz0k%TNcjFwqvm}L31D`#|CBdOaie_R1$(ltUsMN z>oI=n#B)mxQ)BIx>)nChTyx|m>T6(`6>6DH9}J|p%Pt44{^q)%b5^N2g;_H;&)p(z zysmsGK!?-u&C@1dwA%jIeftG#E@=DW9y_YHayTx>q<_qZ8NS|!jB9jOi?cY}@R7QC zh`xXwUzMcWoWr0Nd=E%0Qe73km7odF5K-?ezG_LV<86F-@)qJ(n&4~q`G>@pVhFf< zP7Up};HZ1Sy?r+f(p<0(<^vONUo;C`*e9-aMzUO=Z8=n3#pvhkG9GPAunG;rK7fcw zU?Lu|MUONy7&kep`jP8Gi3wW@bSRHSoyIX|lw;2q9AV*+u3yJBZe(W9Ruo}N;PIo$ z)q!Q+MgpPOA+2)!7r^#aVa4O`U#$@>0qH@GCJiJ0m-wj5`lS1k-)!y8k}@qj{OaVL zyZH4N4gzq~3iFUhQ|WdiXO}82taxi%Jgv-M!%VbpMRjd?w5b#}Mw4W$Bm!!puDXPH zH<JBcUDHC|n}oxSvRY|Z`MTC!nJ@64UO6dEOityv!0sA0i!GzIJxmf$#1=1i3}TOF zUOqpz!Sqc*U7celr^#86zyt_37haTc3yv3>|BxUin<|8i>D5`2IybLcc@lM5MFciP zf|{}>bozNz%g%U(n~KgXB*jL@@OEFLt;)xx>ED&k3Jmr4WdA;VIrcZ(cT>mMn=9w) zhpoMq`v$7fI+B-Xt92IfEUDdv&c57ztUrS!lspWSKOZupfO-DXAF>9N66?gE8hixg z)!>IL_X1?Y>nAKMd7DHmT|{V;Wto{prAfh=&7W_?SlfNduD1o;d5hVqlqX(GwlVEL zW3%RihDi`VV$`q1Ly>;%{#ZXjQ%L>`VGiIe(`F878$Pp}1DAk&vL&#zm348}y|bQU zgLlMCgji`2Sq0X{?%2$nAf$IxMaSbmM@tCK&v-w2UgN{lKzsQhCTHOVHT?Y$xddXX zSK#J5yuVKxI~Dpf^bwA8B-D!Wj_9;r#ww{B{pK0TcEN5*27Y&F^Hcv&57y|$$V;&t zVrfi#U+|~zqERAgQ_mbkZ1Eo@5Lo_Rf#E65ZkZKBR;(+6yNQvbR!MCNUz4##aFk~E z7%V}==BKu!JNRY{k=W1<OQ>#sC8<vwXTX_c;!qf1Xt{FnbJ5Mt;S_oi$49l2j|j!G z`|KDT@7kyh8!MQaHV3qX_(fNt!+VCC564D^M`;%r$iy7G*LY36y5glDp?JYKcrL&K z{e5l&4%$-Agx)UEA4XhQ>ulWG<N6jr-ycyGFvlgWoeL5vhp&Ha%IFdw>T6lOmoX-@ zmBH+DB_TIUDu2Hg-v&do)JmlbL7v^~v*Fi<w6cmqLoB21f#Z`G@hh|}<7tLM9ps|K zYu7Djuohk8VVXzXVk5lmGCTb|`HSBp<A7GU<hbyrrqMd^yi}zBeo-&Yy=&`v;!^VU zc5z9ZnL1tfi%LMJ0|QFa6H`}Rc>Y2*t2j>&Z>+y(gIJcgIOKIO03|%m^qi9%GH0bB zPD@Qj@=+}d!;v8}ZOg0!n+ymJv2&l%g=yA9pKvyV?IBYV5EX_;Mn<?V3674IdnDV$ z`kLfqI>r^K5CXdC<ff2>k9?u|;Z*UV8$EvBji$}})KD!kt;W0+1nY4Hi?I^EeA?J6 zU|X`5$fsMH+DkC$k4$QZK9(i+$%s<Nk0iec)%Rp4RaB(RCAu0MV1q8rV|6AgVU2mT z*!<!tk@~SRodsF+u)nlSbRx0O>yw(Z+8h}etS4D;8h>kjO}&|`u5ad|>JNYa9&@r; zayg65R$3zbMOA6QJK{?Zm0A5WlTz(nUlV;lUM&wjAjwjczM{7^6ia}^&G;13WFJoA z@5GgnmA;8}5MNz1%zXg&GI}2}wV{P}clw}NPFUTv__^UBRbk{+OT2KlEClF>Mtu5I z#rrJng_{O9H5)tDc%C6w6g<e$F$<CO@eif?h@~Npt);5S=blq6%Vo+%u!s$HK8};^ zb18)7*ly4E+fhrKVb;vCHGEh1aP+SiKORX<-N%Np9RB~hy2`&M*e;AnjDa$8gc5ED zOazgZ(!qcsjo|1qXoC%5G!mmz8flPj95_-Wm6S$OIwp;P@a}ou_x<oZ_m}er+}H2A z&$-XJu0vN!gO#719OXNrCQyeSFU^ccttq2yoa0vAZZ6d}boTd(%8Eo-)T(kmM|+Bn z9(cS(Sxh5`_Oio-D}nz?*RPQ(>BSan10v}Q9{Zw)i!>S<Oi5@+a%%NY&7PJlx2|;E zexK7*=l^z|JmmrR+?SG3u$~!ofqGN4qwgDHWq|gGYk$Oe2?kop_u@4}*UqkUjEFnp zUYclLTvbvq9sj8J#R4_JF77AkI)hxHPf2wZ9{OpLfB|aOIdfjSPjfMkY0)h)?yrjk znd39ng{1md3ixe6dU<w8A5Bm3zCD9Erw5-6uG9T6(+RBY;-*t^MsyKEK|I^z3Z&I( z|1FD@Zn<Oc(#uA2I4IzgKL@Yp+qXByI5P-p`W$8&p1u`kfSpqsP=$}d>~Xiw0F*vt z+_L)|#<!0LItn>ny}>JZ{PJ^}W8-(5deSd1OUau;dL6n`@X+Hh&Igl~%SDM%Ncyj) z>AKT|1hozqyDo>Yao!W8@t<Ymh>NLvw}Dq;J2}9}Za@ju<BRYM(UnKMsekE;Xt@N5 z%MH~1Vr4gV376_y#x4cdtc@}hITahTqwy^|qw`Ak*Yswvr`rN6(UGs}itMiU7q>nT z1zRKl3)MIdu3pv+hbxH>TI>bLbxwMVa1907LBt_&%FVewx0e}H77SEgm3-&!lWX<7 zt8)DH*v<1!tY))t=7~3H&G}0Ch;`Z&dFS##hkXQI7LJ+x5ap+?nIfrSKc0DezUe0j zGX-tTud->7=5O$_r7jy2WM(Bga0Z?(*xZ{{rD*04;RqUYEB*1fJSEgHrq8MiRsN3P zc@cNw^5OLNU8ID>l}V8B+4YLJ%&`*ik^R$d6b4%`SqOLA-?Liv&>*QDA!QjXXG<Uc zN~KSsJ3HIU7}HHES93_;n0FS*>eA}_kv=br`<8p%MF1jwa(>y%%(K5%&!M8BYOA+8 zrszi}R)gPv-8z+&GxzQ2-85gM{oQ6bT`r<U9IC2hsueJ0Ifu%NG_dKC%&7j~jr@Bu z4EOiQ9jau#k<<qvYED2%eUJ)YRd6-LaF#BU7KlXyffPQzV3~bpX;xnDlRqUWo0U!( z!-uX#zy0c9QZYsDfu?vO*1}|p4ORKI7g$_&xDi`;7V>9Ov9xq|d1os{7H{kT|9J4T z&8v(0TT`R447P+-xxws(B^lpjFz~|1<1v_Hgdwn*`oV)%IM)q9@rUG8bkHRKJP|Vh zv)%n%zkKbj1|EA)0fcceeXP3R8uy{L^>89cC{(aL-!G6kB^F%#E?+<hP1##!`I4Ig zOjk0eRR8HswHRslY?{X#XU3^G{#VbJ-~V1t6Z0YY<n+Ks1x0wKB*NL}-|Qhqsn+<( z_Sm}cx@i6DP5Y0y>KS~(BML=QCGzfBDKFo-9_Oj$26L##{_<~Hl;DdjV3K$Ae)qak zu=m62OWWM*S%yax2``=x=%0#QN3KFydu_bY2Ko(1UB*f+cG}=icRZ7Ae?^~y))V8G zq1L9hkCdswbqj3zzpkKVFUhgoP(C=6a@$!NUPkvNxOWz6){%sTZ*tYjC^cSix4arQ z&Ei|9XntxgMOH{mi18_QexRf0#KiZ46><zZ3NX;+zf|-M`P!DISQyiI;2tE$8XyXq zV)W9MNkoisE|i#yOlWv)$ycy_$${v5*NjxyUXZ&E*?eHWdENu5o=TkS6AwCE*QXD= zt4`4q9ZVzX31z&(=bvK>&J|yRB>gGyqt!8z^NYN^VBh~|n&-Dn(biQh%is1?@+K)Z z6<+15c8sWE1W!qVk4$9QSm0`5ogZe$L(c)GU57hV+ltfxisime<cP;qV7G)O&CSB1 zw&eNmJ0sK}&3&f;WQOJjlPI?OurkjvEHG?J^rZ$_+s^rOFE0TDr5o`Z@8Rc%fb~yF zz=WBNmI2DVrYfzR@xq$AUx&$CZ$X05-Nz#E=D3<8{ByWuWzPE?H4g|`fNHm1?nd+; zu;;hh_j<zv*%MV-*3`Or@X--|ksU+$-f5aT7cMe7bDuX0EPQA^htf+9T(}Awv!P(S zq~gn9`Hzr!qb0xqre`Y5K#^3D0w|dlfV2S49y7dron+RoVIfjw^|Ou2wIi&bMyOm8 zXA-1l)FX|1q5vCIvWIUfhE%L)mt$y@+d>|;!3xca6jZ--CbUWIf9gS?)zI-O2RVDU zq@_^W?wqVhzGJ~1&em7rOw3Yhij7)qo%eYM<VrK6Q`^TfGDZq+jLj*&a$!l9Kj7{f zY;C7qz}X0!!BlXu$xTVB&g1-}_JGc^5SCI#L%Z`X_`<bsR!d=Md5QexHo329%G^4H z>9Cp4DYQ~%PeagZN1xdU0cU3qGVXv>Vlnqo2HjbCocP^8MxOb(_^TK(<eXr4Zj=UF zbmzk3^vNg1NxCaQoI)%dg%L{(rJy)51q}(3%k+|To8OV`wK7+BW(&(cD)dK>;O<cA znPd|OW7?I;{VzOp-Ey<|gwu`MKkJK(+{o|t_PjO*BW5<MBtR#zn&YBE3EC(0^u8vd zT#u1Z4zn6X7E5F~!S=&-wv!$?pr&<skaT*>G|x%BK;5mLHH1Pu4N2cTB6JE(mNQ2T zMz^IoQZoQ=*5&U$shG3@uFZSd&f0_UdMz4Sk<!9zF4GuG-}t)0Q@~P8i>edbnerFD zz{=V4_HM5OfmW+_Bm?)mignM6>M{j!f9trg&_%9YfEJ%S<5^bC(JmK<K-A0F9g9OP zetTkoSk`$K!~XY=vnS2`PtQa@K@}%s0nwBiM_1<XJ6~4?ULW=G{xH0tuv6swIt7?W z)az4)&Z6H?HF_ECT^6_QxE7~5r7Hi7rp?XXB%!1Ci?O_)`vf_1y3wzu372a0K{n#; z>7><r)<tFgs6uMfh=0M51WLaPL2?b$pNy+#&(<WF45fP2Dz1f-L4IlQ%q`qWRY!@% zpxb*73RswlaxF|iUz0ak1yjv3gSk|-k}=G@aRb6j3+>)U*EV?z&B~46a3p`Epa0hC zjdpdlPTYRt)hp@f@Wdhyge`0UflQig>tZ%@!`fb7$_pNiDPwWl4&<sK{yJwNd>3bA zjvLYj+kn)N+cvtT*?J_G%M;EqpGN=sViy$96a-83&m-q5(W{saHT$GLZUos5h#rQg zWGUkZ4OvbLAD-Ir8S0#j2o1xmBtR^;e(rTV{JPhR`gSr1;ZD@WAK^wr($iPno1F2v zVKXYl@wj1Qns`9CF+AaN8*C^EFBA5ai<hs4zke83RLl~;4b~-81_VxPCp`k(m8gts z(XUcm_)_-D`=wLdZEKZbX=0DL8ye12qPG$XKus)Pad-?+X#X3zu$#4!D7AZKn8rN! zj!@5PGAp{DqwTnqR(G@Ts#=w+Ovn<yE+@gXQ~9VIubId3T~R>0xP6^oup#N)j<M7f zKx9Nc@dqFb7bgdQPxGAqg;GTN<FP-;k`c#KsL1+86#KrwFe5=?{4*n0d??=A>5_{} z910a_N!y+sQd&qLnr!KY*cZhaDV>Ct^?QFNE?4YUUf}pE4yTX30+^l7x9NgTs!)ug z>}hcCnJ6lIT)d+(xMB99B!`}F9bJtAt~pW#s~qMuiv{*c%2PT{Mb<{Z60|Uut0qfI zlANPGPmPD6Kbrx^P<tXp+RxQ44nNEWTQN6H9mG3WTv7Von~=p+ffeC?A**){!ap88 z_k68v5_>NGNT*vp>)B!<OZA$|IMzsKPwg(l89CVMAKdsqrUd*&k)xqk5WY0UoIpjN zG!k~-OHcq3nI?rNt~y}eX#`IMd^WpPqk$@Ypj<D#rYI5ikVsTjZ?u&1BSZ!ma8C4N zt)3Yq-~vV{_J^0)_M^0{*2DSMBUH@^)xK*xOw#hhI6RVv6IB_mf{JiqM=`Z77cU$` zm1eVh*`uQE2<?xC?ivTf^?4YrBqW34oAi4?*l~IPojn`rUG*Z?OQQS4SL`2`6~C;` zBTK%xJ|x#pHCIWe9jWP{Q1eGHr#e!K?H)<_SFEcQaCkvin_b#q^QkAi6(B>VfrH~c zI-`(HWin0u8-fN}Ou~$np-D0WVVl`wzG~{F3qfo&x*CWQ74LAHjV8k23R8W~;0DvC zZtD=<6`fsh-^FRne=D@=!^SzqsQqYdaDgslG3odhU?_bVfjKz8eRj4aPzC;p%V7|L z>WDWuA8YFDPu$xMkjQ;Tj1K=gh=zrDQ7FTU)ZM6g7>%D=us9Rfy#;9M$G!!t=<fT) zCH<Mdy!mlFej3Wx2E+7Q?`936HDd?=zH}Q|bcW@a;*};tMaE6HC;t3QhHrWFJPBGW z*5QewoEnUKRfC4tCZ12bh`@ayTi<BB{le~$lUSt%@XtWOa18z-nXG=O`u!3a=^znW K%4Kj%|Nj6Vu-J(J literal 154752 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 From 5e1331144a9187c5ab5b061d7cfd6e1f69b6d53a Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Sun, 17 Nov 2024 22:59:29 +0530 Subject: [PATCH 076/115] feat(readme): update readme cache --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4aa17cb..721d41c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 🚀 Perplexica - An AI-powered search engine 🔎 <!-- omit in toc --> -![preview](.assets/perplexica-screenshot.png) +![preview](.assets/perplexica-screenshot.png?) ## Table of Contents <!-- omit in toc --> From 9e746aea5e51f786985e94766295e83706499deb Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Sun, 17 Nov 2024 23:01:02 +0530 Subject: [PATCH 077/115] feat(readme): remove `?` from image URL --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 721d41c..4aa17cb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 🚀 Perplexica - An AI-powered search engine 🔎 <!-- omit in toc --> -![preview](.assets/perplexica-screenshot.png?) +![preview](.assets/perplexica-screenshot.png) ## Table of Contents <!-- omit in toc --> From a58adbfecc951e15bc109202164609096420e38e Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Sun, 17 Nov 2024 23:01:24 +0530 Subject: [PATCH 078/115] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4aa17cb..721d41c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 🚀 Perplexica - An AI-powered search engine 🔎 <!-- omit in toc --> -![preview](.assets/perplexica-screenshot.png) +![preview](.assets/perplexica-screenshot.png?) ## Table of Contents <!-- omit in toc --> From c7bab9180346798dc8a98a8af9ac79ac08f920c8 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Tue, 19 Nov 2024 10:43:50 +0530 Subject: [PATCH 079/115] feat(webSearchAgent): prevent excess results --- src/agents/webSearchAgent.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/agents/webSearchAgent.ts b/src/agents/webSearchAgent.ts index 1ff3354..e2c5adc 100644 --- a/src/agents/webSearchAgent.ts +++ b/src/agents/webSearchAgent.ts @@ -337,7 +337,7 @@ const createBasicWebSearchAnsweringChain = ( } if (query.toLocaleLowerCase() === 'summarize') { - return docs; + return docs.slice(0, 15) } const docsWithContent = docs.filter( From b4a80d8ca095749912825b1fb7bb7b41b379864d Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Tue, 19 Nov 2024 14:40:24 +0530 Subject: [PATCH 080/115] feat(dockerfile): downgrade node version, closes #473 --- app.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.dockerfile b/app.dockerfile index ff1824d..488e64b 100644 --- a/app.dockerfile +++ b/app.dockerfile @@ -1,4 +1,4 @@ -FROM node:alpine +FROM node:20.18.0-alpine ARG NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001 ARG NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api From 874505cd0e7193901e74a53ba65e14e76fc82738 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Tue, 19 Nov 2024 16:32:30 +0530 Subject: [PATCH 081/115] feat(package): bump version --- package.json | 2 +- ui/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d84e1a6..db70194 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "perplexica-backend", - "version": "1.9.2", + "version": "1.9.3", "license": "MIT", "author": "ItzCrazyKns", "scripts": { diff --git a/ui/package.json b/ui/package.json index 098926a..4d63027 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,6 +1,6 @@ { "name": "perplexica-frontend", - "version": "1.9.2", + "version": "1.9.3", "license": "MIT", "author": "ItzCrazyKns", "scripts": { From c650d1c3d9cd4d9516b52c33a2e4e444aa5d4ae8 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 20 Nov 2024 19:11:47 +0530 Subject: [PATCH 082/115] feat(ollama): add keep_alive param --- sample.config.toml | 1 + src/config.ts | 3 +++ src/lib/providers/ollama.ts | 6 ++++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/sample.config.toml b/sample.config.toml index f6c6943..dddcc03 100644 --- a/sample.config.toml +++ b/sample.config.toml @@ -1,6 +1,7 @@ [GENERAL] PORT = 3001 # Port to run the server on SIMILARITY_MEASURE = "cosine" # "cosine" or "dot" +KEEP_ALIVE = "5m" # How long to keep Ollama models loaded into memory. (Instead of using -1 use "-1m") [API_KEYS] OPENAI = "" # OpenAI API key - sk-1234567890abcdef1234567890abcdef diff --git a/src/config.ts b/src/config.ts index bb69335..8624e7f 100644 --- a/src/config.ts +++ b/src/config.ts @@ -8,6 +8,7 @@ interface Config { GENERAL: { PORT: number; SIMILARITY_MEASURE: string; + KEEP_ALIVE: string; }; API_KEYS: { OPENAI: string; @@ -34,6 +35,8 @@ export const getPort = () => loadConfig().GENERAL.PORT; export const getSimilarityMeasure = () => loadConfig().GENERAL.SIMILARITY_MEASURE; +export const getKeepAlive = () => loadConfig().GENERAL.KEEP_ALIVE; + export const getOpenaiApiKey = () => loadConfig().API_KEYS.OPENAI; export const getGroqApiKey = () => loadConfig().API_KEYS.GROQ; diff --git a/src/lib/providers/ollama.ts b/src/lib/providers/ollama.ts index ed68bfa..8c36c98 100644 --- a/src/lib/providers/ollama.ts +++ b/src/lib/providers/ollama.ts @@ -1,11 +1,12 @@ import { OllamaEmbeddings } from '@langchain/community/embeddings/ollama'; -import { getOllamaApiEndpoint } from '../../config'; +import { getKeepAlive, getOllamaApiEndpoint } from '../../config'; import logger from '../../utils/logger'; import { ChatOllama } from '@langchain/community/chat_models/ollama'; export const loadOllamaChatModels = async () => { const ollamaEndpoint = getOllamaApiEndpoint(); - + const keepAlive = getKeepAlive(); + if (!ollamaEndpoint) return {}; try { @@ -24,6 +25,7 @@ export const loadOllamaChatModels = async () => { baseUrl: ollamaEndpoint, model: model.model, temperature: 0.7, + keepAlive: keepAlive }), }; From 4b89008f3a314e1364bfefe42ea5e85eca4eb096 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Sat, 23 Nov 2024 15:04:19 +0530 Subject: [PATCH 083/115] feat(app): add file uploads --- .prettierignore | 5 +- backend.dockerfile | 1 + docker-compose.yaml | 2 + package.json | 5 +- src/agents/webSearchAgent.ts | 87 ++++++- src/db/schema.ts | 9 + src/lib/providers/ollama.ts | 4 +- src/routes/index.ts | 2 + src/routes/uploads.ts | 151 +++++++++++ .../linkDocument.ts => utils/documents.ts} | 2 +- src/utils/files.ts | 16 ++ src/websocket/messageHandler.ts | 4 + ui/components/Chat.tsx | 19 +- ui/components/ChatWindow.tsx | 33 +++ ui/components/EmptyChat.tsx | 13 + ui/components/EmptyChatMessageInput.tsx | 19 +- ui/components/MessageInput.tsx | 26 +- ui/components/MessageInputActions/Attach.tsx | 181 ++++++++++++- .../MessageInputActions/AttachSmall.tsx | 153 +++++++++++ ui/components/MessageInputActions/Focus.tsx | 9 +- ui/components/MessageSources.tsx | 66 +++-- ui/package.json | 2 +- ui/yarn.lock | 68 ++--- uploads/.gitignore | 2 + yarn.lock | 242 +++++++++++++++++- 25 files changed, 1035 insertions(+), 86 deletions(-) create mode 100644 src/routes/uploads.ts rename src/{lib/linkDocument.ts => utils/documents.ts} (98%) create mode 100644 src/utils/files.ts create mode 100644 ui/components/MessageInputActions/AttachSmall.tsx create mode 100644 uploads/.gitignore diff --git a/.prettierignore b/.prettierignore index c184fdb..55d3c7c 100644 --- a/.prettierignore +++ b/.prettierignore @@ -35,4 +35,7 @@ coverage *.swp # Ignore all files with the .DS_Store extension (macOS specific) -.DS_Store \ No newline at end of file +.DS_Store + +# Ignore all files in uploads directory +uploads \ No newline at end of file diff --git a/backend.dockerfile b/backend.dockerfile index 87cd21c..b6ab95a 100644 --- a/backend.dockerfile +++ b/backend.dockerfile @@ -9,6 +9,7 @@ COPY package.json /home/perplexica/ COPY yarn.lock /home/perplexica/ RUN mkdir /home/perplexica/data +RUN mkdir /home/perplexica/uploads RUN yarn install --frozen-lockfile --network-timeout 600000 RUN yarn build diff --git a/docker-compose.yaml b/docker-compose.yaml index 46d82c6..a0e1d73 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -22,6 +22,7 @@ services: - 3001:3001 volumes: - backend-dbstore:/home/perplexica/data + - uploads:/home/perplexica/uploads - ./config.toml:/home/perplexica/config.toml extra_hosts: - 'host.docker.internal:host-gateway' @@ -50,3 +51,4 @@ networks: volumes: backend-dbstore: + uploads: diff --git a/package.json b/package.json index db70194..3a3a1cc 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "start": "npm run db:push && node dist/app.js", "build": "tsc", - "dev": "nodemon src/app.ts", + "dev": "nodemon --ignore uploads/ src/app.ts ", "db:push": "drizzle-kit push sqlite", "format": "prettier . --check", "format:write": "prettier . --write" @@ -16,6 +16,7 @@ "@types/cors": "^2.8.17", "@types/express": "^4.17.21", "@types/html-to-text": "^9.0.4", + "@types/multer": "^1.4.12", "@types/pdf-parse": "^1.1.4", "@types/readable-stream": "^4.0.11", "@types/ws": "^8.5.12", @@ -41,6 +42,8 @@ "express": "^4.19.2", "html-to-text": "^9.0.5", "langchain": "^0.1.30", + "mammoth": "^1.8.0", + "multer": "^1.4.5-lts.1", "pdf-parse": "^1.1.1", "winston": "^3.13.0", "ws": "^8.17.1", diff --git a/src/agents/webSearchAgent.ts b/src/agents/webSearchAgent.ts index e2c5adc..4303762 100644 --- a/src/agents/webSearchAgent.ts +++ b/src/agents/webSearchAgent.ts @@ -20,10 +20,12 @@ import eventEmitter from 'events'; import computeSimilarity from '../utils/computeSimilarity'; import logger from '../utils/logger'; import LineListOutputParser from '../lib/outputParsers/listLineOutputParser'; -import { getDocumentsFromLinks } from '../lib/linkDocument'; import LineOutputParser from '../lib/outputParsers/lineOutputParser'; import { IterableReadableStream } from '@langchain/core/utils/stream'; import { ChatOpenAI } from '@langchain/openai'; +import path from 'path'; +import fs from 'fs'; +import { getDocumentsFromLinks } from '../utils/documents'; const basicSearchRetrieverPrompt = ` You are an AI question rephraser. You will be given a conversation and a follow-up question, you will have to rephrase the follow up question so it is a standalone question and can be used by another LLM to search the web for information to answer it. @@ -316,6 +318,7 @@ const createBasicWebSearchAnsweringChain = ( llm: BaseChatModel, embeddings: Embeddings, optimizationMode: 'speed' | 'balanced' | 'quality', + fileIds: string[], ) => { const basicWebSearchRetrieverChain = createBasicWebSearchRetrieverChain(llm); @@ -336,8 +339,32 @@ const createBasicWebSearchAnsweringChain = ( return docs; } + const filesData = fileIds + .map((file) => { + const filePath = path.join(process.cwd(), 'uploads', file); + + const contentPath = filePath + '-extracted.json'; + const embeddingsPath = filePath + '-embeddings.json'; + + const content = JSON.parse(fs.readFileSync(contentPath, 'utf8')); + const embeddings = JSON.parse(fs.readFileSync(embeddingsPath, 'utf8')); + + const fileSimilaritySearchObject = content.contents.map( + (c: string, i) => { + return { + fileName: content.title, + content: c, + embeddings: embeddings.embeddings[i], + }; + }, + ); + + return fileSimilaritySearchObject; + }) + .flat(); + if (query.toLocaleLowerCase() === 'summarize') { - return docs.slice(0, 15) + return docs.slice(0, 15); } const docsWithContent = docs.filter( @@ -345,7 +372,43 @@ const createBasicWebSearchAnsweringChain = ( ); if (optimizationMode === 'speed') { - return docsWithContent.slice(0, 15); + if (filesData.length > 0) { + const [queryEmbedding] = await Promise.all([ + embeddings.embedQuery(query), + ]); + + const fileDocs = filesData.map((fileData) => { + return new Document({ + pageContent: fileData.content, + metadata: { + title: fileData.fileName, + url: `File`, + }, + }); + }); + + const similarity = filesData.map((fileData, i) => { + const sim = computeSimilarity(queryEmbedding, fileData.embeddings); + + return { + index: i, + similarity: sim, + }; + }); + + const sortedDocs = similarity + .filter((sim) => sim.similarity > 0.3) + .sort((a, b) => b.similarity - a.similarity) + .slice(0, 8) + .map((sim) => fileDocs[sim.index]); + + return [ + ...sortedDocs, + ...docsWithContent.slice(0, 15 - sortedDocs.length), + ]; + } else { + return docsWithContent.slice(0, 15); + } } else if (optimizationMode === 'balanced') { const [docEmbeddings, queryEmbedding] = await Promise.all([ embeddings.embedDocuments( @@ -354,6 +417,20 @@ const createBasicWebSearchAnsweringChain = ( embeddings.embedQuery(query), ]); + docsWithContent.push( + ...filesData.map((fileData) => { + return new Document({ + pageContent: fileData.content, + metadata: { + title: fileData.fileName, + url: `File`, + }, + }); + }), + ); + + docEmbeddings.push(...filesData.map((fileData) => fileData.embeddings)); + const similarity = docEmbeddings.map((docEmbedding, i) => { const sim = computeSimilarity(queryEmbedding, docEmbedding); @@ -408,6 +485,7 @@ const basicWebSearch = ( llm: BaseChatModel, embeddings: Embeddings, optimizationMode: 'speed' | 'balanced' | 'quality', + fileIds: string[], ) => { const emitter = new eventEmitter(); @@ -416,6 +494,7 @@ const basicWebSearch = ( llm, embeddings, optimizationMode, + fileIds, ); const stream = basicWebSearchAnsweringChain.streamEvents( @@ -446,6 +525,7 @@ const handleWebSearch = ( llm: BaseChatModel, embeddings: Embeddings, optimizationMode: 'speed' | 'balanced' | 'quality', + fileIds: string[], ) => { const emitter = basicWebSearch( message, @@ -453,6 +533,7 @@ const handleWebSearch = ( llm, embeddings, optimizationMode, + fileIds, ); return emitter; }; diff --git a/src/db/schema.ts b/src/db/schema.ts index 9eefa55..cee9660 100644 --- a/src/db/schema.ts +++ b/src/db/schema.ts @@ -1,3 +1,4 @@ +import { sql } from 'drizzle-orm'; import { text, integer, sqliteTable } from 'drizzle-orm/sqlite-core'; export const messages = sqliteTable('messages', { @@ -11,9 +12,17 @@ export const messages = sqliteTable('messages', { }), }); +interface File { + name: string; + fileId: string; +} + export const chats = sqliteTable('chats', { id: text('id').primaryKey(), title: text('title').notNull(), createdAt: text('createdAt').notNull(), focusMode: text('focusMode').notNull(), + files: text('files', { mode: 'json' }) + .$type<File[]>() + .default(sql`'[]'`), }); diff --git a/src/lib/providers/ollama.ts b/src/lib/providers/ollama.ts index 8c36c98..e23fb76 100644 --- a/src/lib/providers/ollama.ts +++ b/src/lib/providers/ollama.ts @@ -6,7 +6,7 @@ import { ChatOllama } from '@langchain/community/chat_models/ollama'; export const loadOllamaChatModels = async () => { const ollamaEndpoint = getOllamaApiEndpoint(); const keepAlive = getKeepAlive(); - + if (!ollamaEndpoint) return {}; try { @@ -25,7 +25,7 @@ export const loadOllamaChatModels = async () => { baseUrl: ollamaEndpoint, model: model.model, temperature: 0.7, - keepAlive: keepAlive + keepAlive: keepAlive, }), }; diff --git a/src/routes/index.ts b/src/routes/index.ts index 28c297f..cb2c915 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -7,6 +7,7 @@ import suggestionsRouter from './suggestions'; import chatsRouter from './chats'; import searchRouter from './search'; import discoverRouter from './discover'; +import uploadsRouter from './uploads'; const router = express.Router(); @@ -18,5 +19,6 @@ router.use('/suggestions', suggestionsRouter); router.use('/chats', chatsRouter); router.use('/search', searchRouter); router.use('/discover', discoverRouter); +router.use('/uploads', uploadsRouter); export default router; diff --git a/src/routes/uploads.ts b/src/routes/uploads.ts new file mode 100644 index 0000000..7b063fc --- /dev/null +++ b/src/routes/uploads.ts @@ -0,0 +1,151 @@ +import express from 'express'; +import logger from '../utils/logger'; +import multer from 'multer'; +import path from 'path'; +import crypto from 'crypto'; +import fs from 'fs'; +import { Embeddings } from '@langchain/core/embeddings'; +import { getAvailableEmbeddingModelProviders } from '../lib/providers'; +import { PDFLoader } from '@langchain/community/document_loaders/fs/pdf'; +import { DocxLoader } from '@langchain/community/document_loaders/fs/docx'; +import { RecursiveCharacterTextSplitter } from '@langchain/textsplitters'; +import { Document } from 'langchain/document'; + +const router = express.Router(); + +const splitter = new RecursiveCharacterTextSplitter({ + chunkSize: 500, + chunkOverlap: 100, +}); + +const storage = multer.diskStorage({ + destination: (req, file, cb) => { + cb(null, path.join(process.cwd(), './uploads')); + }, + filename: (req, file, cb) => { + const splitedFileName = file.originalname.split('.'); + const fileExtension = splitedFileName[splitedFileName.length - 1]; + if (!['pdf', 'docx', 'txt'].includes(fileExtension)) { + return cb(new Error('File type is not supported'), ''); + } + cb(null, `${crypto.randomBytes(16).toString('hex')}.${fileExtension}`); + }, +}); + +const upload = multer({ storage }); + +router.post( + '/', + upload.fields([ + { name: 'files' }, + { name: 'embedding_model', maxCount: 1 }, + { name: 'embedding_model_provider', maxCount: 1 }, + ]), + async (req, res) => { + try { + const { embedding_model, embedding_model_provider } = req.body; + + if (!embedding_model || !embedding_model_provider) { + res + .status(400) + .json({ message: 'Missing embedding model or provider' }); + return; + } + + const embeddingModels = await getAvailableEmbeddingModelProviders(); + const provider = + embedding_model_provider ?? Object.keys(embeddingModels)[0]; + const embeddingModel: Embeddings = + embedding_model ?? Object.keys(embeddingModels[provider])[0]; + + let embeddingsModel: Embeddings | undefined; + + if ( + embeddingModels[provider] && + embeddingModels[provider][embeddingModel] + ) { + embeddingsModel = embeddingModels[provider][embeddingModel].model as + | Embeddings + | undefined; + } + + if (!embeddingsModel) { + res.status(400).json({ message: 'Invalid LLM model selected' }); + return; + } + + const files = req.files['files'] as Express.Multer.File[]; + if (!files || files.length === 0) { + res.status(400).json({ message: 'No files uploaded' }); + return; + } + + await Promise.all( + files.map(async (file) => { + let docs: Document[] = []; + + if (file.mimetype === 'application/pdf') { + const loader = new PDFLoader(file.path); + docs = await loader.load(); + } else if ( + file.mimetype === + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' + ) { + const loader = new DocxLoader(file.path); + docs = await loader.load(); + } else if (file.mimetype === 'text/plain') { + const text = fs.readFileSync(file.path, 'utf-8'); + docs = [ + new Document({ + pageContent: text, + metadata: { + title: file.originalname, + }, + }), + ]; + } + + const splitted = await splitter.splitDocuments(docs); + + const json = JSON.stringify({ + title: file.originalname, + contents: splitted.map((doc) => doc.pageContent), + }); + + const pathToSave = file.path.replace(/\.\w+$/, '-extracted.json'); + fs.writeFileSync(pathToSave, json); + + const embeddings = await embeddingsModel.embedDocuments( + splitted.map((doc) => doc.pageContent), + ); + + const embeddingsJSON = JSON.stringify({ + title: file.originalname, + embeddings: embeddings, + }); + + const pathToSaveEmbeddings = file.path.replace( + /\.\w+$/, + '-embeddings.json', + ); + fs.writeFileSync(pathToSaveEmbeddings, embeddingsJSON); + }), + ); + + res.status(200).json({ + files: files.map((file) => { + return { + fileName: file.originalname, + fileExtension: file.filename.split('.').pop(), + fileId: file.filename.replace(/\.\w+$/, ''), + }; + }), + }); + } catch (err: any) { + logger.error(`Error in uploading file results: ${err.message}`); + res.status(500).json({ message: 'An error has occurred.' }); + } + }, +); + +export default router; diff --git a/src/lib/linkDocument.ts b/src/utils/documents.ts similarity index 98% rename from src/lib/linkDocument.ts rename to src/utils/documents.ts index 5e90571..5cd0366 100644 --- a/src/lib/linkDocument.ts +++ b/src/utils/documents.ts @@ -3,7 +3,7 @@ import { htmlToText } from 'html-to-text'; import { RecursiveCharacterTextSplitter } from 'langchain/text_splitter'; import { Document } from '@langchain/core/documents'; import pdfParse from 'pdf-parse'; -import logger from '../utils/logger'; +import logger from './logger'; export const getDocumentsFromLinks = async ({ links }: { links: string[] }) => { const splitter = new RecursiveCharacterTextSplitter(); diff --git a/src/utils/files.ts b/src/utils/files.ts new file mode 100644 index 0000000..3e7a134 --- /dev/null +++ b/src/utils/files.ts @@ -0,0 +1,16 @@ +import path from 'path'; +import fs from 'fs'; +export const getFileDetails = (fileId: string) => { + const fileLoc = path.join( + process.cwd(), + './uploads', + fileId + '-extracted.json', + ); + + const parsedFile = JSON.parse(fs.readFileSync(fileLoc, 'utf8')); + + return { + name: parsedFile.title, + fileId: fileId, + }; +}; diff --git a/src/websocket/messageHandler.ts b/src/websocket/messageHandler.ts index e915b22..d2a2518 100644 --- a/src/websocket/messageHandler.ts +++ b/src/websocket/messageHandler.ts @@ -13,6 +13,7 @@ import db from '../db'; import { chats, messages as messagesSchema } from '../db/schema'; import { eq, asc, gt } from 'drizzle-orm'; import crypto from 'crypto'; +import { getFileDetails } from '../utils/files'; type Message = { messageId: string; @@ -26,6 +27,7 @@ type WSMessage = { type: string; focusMode: string; history: Array<[string, string]>; + files: Array<string>; }; export const searchHandlers = { @@ -141,6 +143,7 @@ export const handleMessage = async ( llm, embeddings, parsedWSMessage.optimizationMode, + parsedWSMessage.files, ); handleEmitterEvents(emitter, ws, aiMessageId, parsedMessage.chatId); @@ -157,6 +160,7 @@ export const handleMessage = async ( title: parsedMessage.content, createdAt: new Date().toString(), focusMode: parsedWSMessage.focusMode, + files: parsedWSMessage.files.map(getFileDetails), }) .execute(); } diff --git a/ui/components/Chat.tsx b/ui/components/Chat.tsx index 8c0fb80..81aa32f 100644 --- a/ui/components/Chat.tsx +++ b/ui/components/Chat.tsx @@ -2,7 +2,7 @@ import { Fragment, useEffect, useRef, useState } from 'react'; import MessageInput from './MessageInput'; -import { Message } from './ChatWindow'; +import { File, Message } from './ChatWindow'; import MessageBox from './MessageBox'; import MessageBoxLoading from './MessageBoxLoading'; @@ -12,12 +12,20 @@ const Chat = ({ sendMessage, messageAppeared, rewrite, + fileIds, + setFileIds, + files, + setFiles, }: { messages: Message[]; sendMessage: (message: string) => void; loading: boolean; messageAppeared: boolean; rewrite: (messageId: string) => void; + fileIds: string[]; + setFileIds: (fileIds: string[]) => void; + files: File[]; + setFiles: (files: File[]) => void; }) => { const [dividerWidth, setDividerWidth] = useState(0); const dividerRef = useRef<HTMLDivElement | null>(null); @@ -78,7 +86,14 @@ const Chat = ({ className="bottom-24 lg:bottom-10 fixed z-40" style={{ width: dividerWidth }} > - <MessageInput loading={loading} sendMessage={sendMessage} /> + <MessageInput + loading={loading} + sendMessage={sendMessage} + fileIds={fileIds} + setFileIds={setFileIds} + files={files} + setFiles={setFiles} + /> </div> )} </div> diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index f9bd583..fd3d0a6 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -21,6 +21,12 @@ export type Message = { sources?: Document[]; }; +export interface File { + fileName: string; + fileExtension: string; + fileId: string; +} + const useSocket = ( url: string, setIsWSReady: (ready: boolean) => void, @@ -217,6 +223,8 @@ const loadMessages = async ( setChatHistory: (history: [string, string][]) => void, setFocusMode: (mode: string) => void, setNotFound: (notFound: boolean) => void, + setFiles: (files: File[]) => void, + setFileIds: (fileIds: string[]) => void, ) => { const res = await fetch( `${process.env.NEXT_PUBLIC_API_URL}/chats/${chatId}`, @@ -253,6 +261,17 @@ const loadMessages = async ( document.title = messages[0].content; + const files = data.chat.files.map((file: any) => { + return { + fileName: file.name, + fileExtension: file.name.split('.').pop(), + fileId: file.fileId, + }; + }); + + setFiles(files); + setFileIds(files.map((file: File) => file.fileId)); + setChatHistory(history); setFocusMode(data.chat.focusMode); setIsMessagesLoaded(true); @@ -281,6 +300,9 @@ const ChatWindow = ({ id }: { id?: string }) => { const [chatHistory, setChatHistory] = useState<[string, string][]>([]); const [messages, setMessages] = useState<Message[]>([]); + const [files, setFiles] = useState<File[]>([]); + const [fileIds, setFileIds] = useState<string[]>([]); + const [focusMode, setFocusMode] = useState('webSearch'); const [optimizationMode, setOptimizationMode] = useState('speed'); @@ -302,6 +324,8 @@ const ChatWindow = ({ id }: { id?: string }) => { setChatHistory, setFocusMode, setNotFound, + setFiles, + setFileIds, ); } else if (!chatId) { setNewChatCreated(true); @@ -354,6 +378,7 @@ const ChatWindow = ({ id }: { id?: string }) => { chatId: chatId!, content: message, }, + files: fileIds, focusMode: focusMode, optimizationMode: optimizationMode, history: [...chatHistory, ['human', message]], @@ -511,6 +536,10 @@ const ChatWindow = ({ id }: { id?: string }) => { sendMessage={sendMessage} messageAppeared={messageAppeared} rewrite={rewrite} + fileIds={fileIds} + setFileIds={setFileIds} + files={files} + setFiles={setFiles} /> </> ) : ( @@ -520,6 +549,10 @@ const ChatWindow = ({ id }: { id?: string }) => { setFocusMode={setFocusMode} optimizationMode={optimizationMode} setOptimizationMode={setOptimizationMode} + fileIds={fileIds} + setFileIds={setFileIds} + files={files} + setFiles={setFiles} /> )} </div> diff --git a/ui/components/EmptyChat.tsx b/ui/components/EmptyChat.tsx index 6b2412b..c47c301 100644 --- a/ui/components/EmptyChat.tsx +++ b/ui/components/EmptyChat.tsx @@ -2,6 +2,7 @@ import { Settings } from 'lucide-react'; import EmptyChatMessageInput from './EmptyChatMessageInput'; import SettingsDialog from './SettingsDialog'; import { useState } from 'react'; +import { File } from './ChatWindow'; const EmptyChat = ({ sendMessage, @@ -9,12 +10,20 @@ const EmptyChat = ({ setFocusMode, optimizationMode, setOptimizationMode, + fileIds, + setFileIds, + files, + setFiles, }: { sendMessage: (message: string) => void; focusMode: string; setFocusMode: (mode: string) => void; optimizationMode: string; setOptimizationMode: (mode: string) => void; + fileIds: string[]; + setFileIds: (fileIds: string[]) => void; + files: File[]; + setFiles: (files: File[]) => void; }) => { const [isSettingsOpen, setIsSettingsOpen] = useState(false); @@ -37,6 +46,10 @@ const EmptyChat = ({ setFocusMode={setFocusMode} optimizationMode={optimizationMode} setOptimizationMode={setOptimizationMode} + fileIds={fileIds} + setFileIds={setFileIds} + files={files} + setFiles={setFiles} /> </div> </div> diff --git a/ui/components/EmptyChatMessageInput.tsx b/ui/components/EmptyChatMessageInput.tsx index 42ad917..43d1e28 100644 --- a/ui/components/EmptyChatMessageInput.tsx +++ b/ui/components/EmptyChatMessageInput.tsx @@ -4,6 +4,8 @@ import TextareaAutosize from 'react-textarea-autosize'; import CopilotToggle from './MessageInputActions/Copilot'; import Focus from './MessageInputActions/Focus'; import Optimization from './MessageInputActions/Optimization'; +import Attach from './MessageInputActions/Attach'; +import { File } from './ChatWindow'; const EmptyChatMessageInput = ({ sendMessage, @@ -11,12 +13,20 @@ const EmptyChatMessageInput = ({ setFocusMode, optimizationMode, setOptimizationMode, + fileIds, + setFileIds, + files, + setFiles, }: { sendMessage: (message: string) => void; focusMode: string; setFocusMode: (mode: string) => void; optimizationMode: string; setOptimizationMode: (mode: string) => void; + fileIds: string[]; + setFileIds: (fileIds: string[]) => void; + files: File[]; + setFiles: (files: File[]) => void; }) => { const [copilotEnabled, setCopilotEnabled] = useState(false); const [message, setMessage] = useState(''); @@ -73,8 +83,15 @@ const EmptyChatMessageInput = ({ placeholder="Ask anything..." /> <div className="flex flex-row items-center justify-between mt-4"> - <div className="flex flex-row items-center space-x-4"> + <div className="flex flex-row items-center space-x-2 lg:space-x-4"> <Focus focusMode={focusMode} setFocusMode={setFocusMode} /> + <Attach + fileIds={fileIds} + setFileIds={setFileIds} + files={files} + setFiles={setFiles} + showText + /> </div> <div className="flex flex-row items-center space-x-1 sm:space-x-4"> <Optimization diff --git a/ui/components/MessageInput.tsx b/ui/components/MessageInput.tsx index 05d44a6..b6b1d96 100644 --- a/ui/components/MessageInput.tsx +++ b/ui/components/MessageInput.tsx @@ -4,13 +4,23 @@ import { useEffect, useRef, useState } from 'react'; import TextareaAutosize from 'react-textarea-autosize'; import Attach from './MessageInputActions/Attach'; import CopilotToggle from './MessageInputActions/Copilot'; +import { File } from './ChatWindow'; +import AttachSmall from './MessageInputActions/AttachSmall'; const MessageInput = ({ sendMessage, loading, + fileIds, + setFileIds, + files, + setFiles, }: { sendMessage: (message: string) => void; loading: boolean; + fileIds: string[]; + setFileIds: (fileIds: string[]) => void; + files: File[]; + setFiles: (files: File[]) => void; }) => { const [copilotEnabled, setCopilotEnabled] = useState(false); const [message, setMessage] = useState(''); @@ -69,7 +79,14 @@ const MessageInput = ({ mode === 'multi' ? 'flex-col rounded-lg' : 'flex-row rounded-full', )} > - {mode === 'single' && <Attach />} + {mode === 'single' && ( + <AttachSmall + fileIds={fileIds} + setFileIds={setFileIds} + files={files} + setFiles={setFiles} + /> + )} <TextareaAutosize ref={inputRef} value={message} @@ -96,7 +113,12 @@ const MessageInput = ({ )} {mode === 'multi' && ( <div className="flex flex-row items-center justify-between w-full pt-2"> - <Attach /> + <AttachSmall + fileIds={fileIds} + setFileIds={setFileIds} + files={files} + setFiles={setFiles} + /> <div className="flex flex-row items-center space-x-4"> <CopilotToggle copilotEnabled={copilotEnabled} diff --git a/ui/components/MessageInputActions/Attach.tsx b/ui/components/MessageInputActions/Attach.tsx index 6d8ffcf..61cc86a 100644 --- a/ui/components/MessageInputActions/Attach.tsx +++ b/ui/components/MessageInputActions/Attach.tsx @@ -1,12 +1,183 @@ -import { CopyPlus } from 'lucide-react'; +import { cn } from '@/lib/utils'; +import { + Popover, + PopoverButton, + PopoverPanel, + Transition, +} from '@headlessui/react'; +import { CopyPlus, File, LoaderCircle, Plus, Trash } from 'lucide-react'; +import { Fragment, useRef, useState } from 'react'; +import { File as FileType } from '../ChatWindow'; -const Attach = () => { - return ( +const Attach = ({ + fileIds, + setFileIds, + showText, + files, + setFiles, +}: { + fileIds: string[]; + setFileIds: (fileIds: string[]) => void; + showText?: boolean; + files: FileType[]; + setFiles: (files: FileType[]) => void; +}) => { + const [loading, setLoading] = useState(false); + const fileInputRef = useRef<any>(); + + const handleChange = async (e: React.ChangeEvent<HTMLInputElement>) => { + setLoading(true); + const data = new FormData(); + + for (let i = 0; i < e.target.files!.length; i++) { + data.append('files', e.target.files![i]); + } + + const embeddingModelProvider = localStorage.getItem( + 'embeddingModelProvider', + ); + const embeddingModel = localStorage.getItem('embeddingModel'); + + data.append('embedding_model_provider', embeddingModelProvider!); + data.append('embedding_model', embeddingModel!); + + const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/uploads`, { + method: 'POST', + body: data, + }); + + const resData = await res.json(); + + setFiles([...files, ...resData.files]); + setFileIds([...fileIds, ...resData.files.map((file: any) => file.fileId)]); + setLoading(false); + }; + + return loading ? ( + <div className="flex flex-row items-center justify-between space-x-1"> + <LoaderCircle size={18} className="text-sky-400 animate-spin" /> + <p className="text-sky-400 inline whitespace-nowrap text-xs font-medium"> + Uploading.. + </p> + </div> + ) : files.length > 0 ? ( + <Popover className="relative w-full max-w-[15rem] md:max-w-md lg:max-w-lg"> + <PopoverButton + type="button" + className={cn( + 'flex flex-row items-center justify-between space-x-1 p-2 text-black/50 dark:text-white/50 rounded-xl hover:bg-light-secondary dark:hover:bg-dark-secondary active:scale-95 transition duration-200 hover:text-black dark:hover:text-white', + files.length > 0 ? '-ml-2 lg:-ml-3' : '', + )} + > + {files.length > 1 && ( + <> + <File size={19} className="text-sky-400" /> + <p className="text-sky-400 inline whitespace-nowrap text-xs font-medium"> + {files.length} files + </p> + </> + )} + + {files.length === 1 && ( + <> + <File size={18} className="text-sky-400" /> + <p className="text-sky-400 text-xs font-medium"> + {files[0].fileName.length > 10 + ? files[0].fileName.replace(/\.\w+$/, '').substring(0, 3) + + '...' + + files[0].fileExtension + : files[0].fileName} + </p> + </> + )} + </PopoverButton> + <Transition + as={Fragment} + enter="transition ease-out duration-150" + enterFrom="opacity-0 translate-y-1" + enterTo="opacity-100 translate-y-0" + leave="transition ease-in duration-150" + leaveFrom="opacity-100 translate-y-0" + leaveTo="opacity-0 translate-y-1" + > + <PopoverPanel className="absolute z-10 w-64 md:w-[350px] right-0"> + <div className="bg-light-primary dark:bg-dark-primary border rounded-md border-light-200 dark:border-dark-200 w-full max-h-[200px] md:max-h-none overflow-y-auto flex flex-col"> + <div className="flex flex-row items-center justify-between px-3 py-2"> + <h4 className="text-black dark:text-white font-medium text-sm"> + Attached files + </h4> + <div className="flex flex-row items-center space-x-4"> + <button + type="button" + onClick={() => fileInputRef.current.click()} + className="flex flex-row items-center space-x-1 text-white/70 hover:text-white transition duration-200" + > + <input + type="file" + onChange={handleChange} + ref={fileInputRef} + accept=".pdf,.docx,.txt" + multiple + hidden + /> + <Plus size={18} /> + <p className="text-xs">Add</p> + </button> + <button + onClick={() => { + setFiles([]); + setFileIds([]); + }} + className="flex flex-row items-center space-x-1 text-white/70 hover:text-white transition duration-200" + > + <Trash size={14} /> + <p className="text-xs">Clear</p> + </button> + </div> + </div> + <div className="h-[0.5px] mx-2 bg-white/10" /> + <div className="flex flex-col items-center"> + {files.map((file, i) => ( + <div + key={i} + className="flex flex-row items-center justify-start w-full space-x-3 p-3" + > + <div className="bg-dark-100 flex items-center justify-center w-10 h-10 rounded-md"> + <File size={16} className="text-white/70" /> + </div> + <p className="text-white/70 text-sm"> + {file.fileName.length > 25 + ? file.fileName.replace(/\.\w+$/, '').substring(0, 25) + + '...' + + file.fileExtension + : file.fileName} + </p> + </div> + ))} + </div> + </div> + </PopoverPanel> + </Transition> + </Popover> + ) : ( <button type="button" - className="p-2 text-black/50 dark:text-white/50 rounded-xl hover:bg-light-secondary dark:hover:bg-dark-secondary transition duration-200 hover:text-black dark:hover:text-white" + onClick={() => fileInputRef.current.click()} + className={cn( + 'flex flex-row items-center space-x-1 text-black/50 dark:text-white/50 rounded-xl hover:bg-light-secondary dark:hover:bg-dark-secondary transition duration-200 hover:text-black dark:hover:text-white', + showText ? '' : 'p-2', + )} > - <CopyPlus /> + <input + type="file" + onChange={handleChange} + ref={fileInputRef} + accept=".pdf,.docx,.txt" + multiple + hidden + /> + <CopyPlus size={showText ? 18 : undefined} /> + {showText && <p className="text-xs font-medium pl-[1px]">Attach</p>} </button> ); }; diff --git a/ui/components/MessageInputActions/AttachSmall.tsx b/ui/components/MessageInputActions/AttachSmall.tsx new file mode 100644 index 0000000..3514a58 --- /dev/null +++ b/ui/components/MessageInputActions/AttachSmall.tsx @@ -0,0 +1,153 @@ +import { cn } from '@/lib/utils'; +import { + Popover, + PopoverButton, + PopoverPanel, + Transition, +} from '@headlessui/react'; +import { CopyPlus, File, LoaderCircle, Plus, Trash } from 'lucide-react'; +import { Fragment, useRef, useState } from 'react'; +import { File as FileType } from '../ChatWindow'; + +const AttachSmall = ({ + fileIds, + setFileIds, + files, + setFiles, +}: { + fileIds: string[]; + setFileIds: (fileIds: string[]) => void; + files: FileType[]; + setFiles: (files: FileType[]) => void; +}) => { + const [loading, setLoading] = useState(false); + const fileInputRef = useRef<any>(); + + const handleChange = async (e: React.ChangeEvent<HTMLInputElement>) => { + setLoading(true); + const data = new FormData(); + + for (let i = 0; i < e.target.files!.length; i++) { + data.append('files', e.target.files![i]); + } + + const embeddingModelProvider = localStorage.getItem( + 'embeddingModelProvider', + ); + const embeddingModel = localStorage.getItem('embeddingModel'); + + data.append('embedding_model_provider', embeddingModelProvider!); + data.append('embedding_model', embeddingModel!); + + const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/uploads`, { + method: 'POST', + body: data, + }); + + const resData = await res.json(); + + setFiles([...files, ...resData.files]); + setFileIds([...fileIds, ...resData.files.map((file: any) => file.fileId)]); + setLoading(false); + }; + + return loading ? ( + <div className="flex flex-row items-center justify-between space-x-1 p-1"> + <LoaderCircle size={20} className="text-sky-400 animate-spin" /> + </div> + ) : files.length > 0 ? ( + <Popover className="max-w-[15rem] md:max-w-md lg:max-w-lg"> + <PopoverButton + type="button" + className="flex flex-row items-center justify-between space-x-1 p-1 text-black/50 dark:text-white/50 rounded-xl hover:bg-light-secondary dark:hover:bg-dark-secondary active:scale-95 transition duration-200 hover:text-black dark:hover:text-white" + > + <File size={20} className="text-sky-400" /> + </PopoverButton> + <Transition + as={Fragment} + enter="transition ease-out duration-150" + enterFrom="opacity-0 translate-y-1" + enterTo="opacity-100 translate-y-0" + leave="transition ease-in duration-150" + leaveFrom="opacity-100 translate-y-0" + leaveTo="opacity-0 translate-y-1" + > + <PopoverPanel className="absolute z-10 w-64 md:w-[350px] bottom-14 -ml-3"> + <div className="bg-light-primary dark:bg-dark-primary border rounded-md border-light-200 dark:border-dark-200 w-full max-h-[200px] md:max-h-none overflow-y-auto flex flex-col"> + <div className="flex flex-row items-center justify-between px-3 py-2"> + <h4 className="text-black dark:text-white font-medium text-sm"> + Attached files + </h4> + <div className="flex flex-row items-center space-x-4"> + <button + type="button" + onClick={() => fileInputRef.current.click()} + className="flex flex-row items-center space-x-1 text-white/70 hover:text-white transition duration-200" + > + <input + type="file" + onChange={handleChange} + ref={fileInputRef} + accept=".pdf,.docx,.txt" + multiple + hidden + /> + <Plus size={18} /> + <p className="text-xs">Add</p> + </button> + <button + onClick={() => { + setFiles([]); + setFileIds([]); + }} + className="flex flex-row items-center space-x-1 text-white/70 hover:text-white transition duration-200" + > + <Trash size={14} /> + <p className="text-xs">Clear</p> + </button> + </div> + </div> + <div className="h-[0.5px] mx-2 bg-white/10" /> + <div className="flex flex-col items-center"> + {files.map((file, i) => ( + <div + key={i} + className="flex flex-row items-center justify-start w-full space-x-3 p-3" + > + <div className="bg-dark-100 flex items-center justify-center w-10 h-10 rounded-md"> + <File size={16} className="text-white/70" /> + </div> + <p className="text-white/70 text-sm"> + {file.fileName.length > 25 + ? file.fileName.replace(/\.\w+$/, '').substring(0, 25) + + '...' + + file.fileExtension + : file.fileName} + </p> + </div> + ))} + </div> + </div> + </PopoverPanel> + </Transition> + </Popover> + ) : ( + <button + type="button" + onClick={() => fileInputRef.current.click()} + className="flex flex-row items-center space-x-1 text-black/50 dark:text-white/50 rounded-xl hover:bg-light-secondary dark:hover:bg-dark-secondary transition duration-200 hover:text-black dark:hover:text-white p-1" + > + <input + type="file" + onChange={handleChange} + ref={fileInputRef} + accept=".pdf,.docx,.txt" + multiple + hidden + /> + <CopyPlus size={20} /> + </button> + ); +}; + +export default AttachSmall; diff --git a/ui/components/MessageInputActions/Focus.tsx b/ui/components/MessageInputActions/Focus.tsx index e471630..c95be5a 100644 --- a/ui/components/MessageInputActions/Focus.tsx +++ b/ui/components/MessageInputActions/Focus.tsx @@ -75,7 +75,7 @@ const Focus = ({ setFocusMode: (mode: string) => void; }) => { return ( - <Popover className="relative w-full max-w-[15rem] md:max-w-md lg:max-w-lg"> + <Popover className="relative w-full max-w-[15rem] md:max-w-md lg:max-w-lg mt-[6.5px]"> <PopoverButton type="button" className=" text-black/50 dark:text-white/50 rounded-xl hover:bg-light-secondary dark:hover:bg-dark-secondary active:scale-95 transition duration-200 hover:text-black dark:hover:text-white" @@ -86,10 +86,13 @@ const Focus = ({ <p className="text-xs font-medium"> {focusModes.find((mode) => mode.key === focusMode)?.title} </p> - <ChevronDown size={20} /> + <ChevronDown size={20} className="-translate-x-1" /> </div> ) : ( - <ScanEye /> + <div className="flex flex-row items-center space-x-1"> + <ScanEye size={20} /> + <p className="text-xs font-medium">Focus</p> + </div> )} </PopoverButton> <Transition diff --git a/ui/components/MessageSources.tsx b/ui/components/MessageSources.tsx index e9cc1ba..c7ee945 100644 --- a/ui/components/MessageSources.tsx +++ b/ui/components/MessageSources.tsx @@ -7,6 +7,7 @@ import { TransitionChild, } from '@headlessui/react'; import { Document } from '@langchain/core/documents'; +import { File } from 'lucide-react'; import { Fragment, useState } from 'react'; const MessageSources = ({ sources }: { sources: Document[] }) => { @@ -36,13 +37,19 @@ const MessageSources = ({ sources }: { sources: Document[] }) => { </p> <div className="flex flex-row items-center justify-between"> <div className="flex flex-row items-center space-x-1"> - <img - src={`https://s2.googleusercontent.com/s2/favicons?domain_url=${source.metadata.url}`} - width={16} - height={16} - alt="favicon" - className="rounded-lg h-4 w-4" - /> + {source.metadata.url === 'File' ? ( + <div className="bg-dark-200 hover:bg-dark-100 transition duration-200 flex items-center justify-center w-6 h-6 rounded-full"> + <File size={12} className="text-white/70" /> + </div> + ) : ( + <img + src={`https://s2.googleusercontent.com/s2/favicons?domain_url=${source.metadata.url}`} + width={16} + height={16} + alt="favicon" + className="rounded-lg h-4 w-4" + /> + )} <p className="text-xs text-black/50 dark:text-white/50 overflow-hidden whitespace-nowrap text-ellipsis"> {source.metadata.url.replace(/.+\/\/|www.|\..+/g, '')} </p> @@ -60,16 +67,21 @@ const MessageSources = ({ sources }: { sources: Document[] }) => { className="bg-light-100 hover:bg-light-200 dark:bg-dark-100 dark:hover:bg-dark-200 transition duration-200 rounded-lg p-3 flex flex-col space-y-2 font-medium" > <div className="flex flex-row items-center space-x-1"> - {sources.slice(3, 6).map((source, i) => ( - <img - src={`https://s2.googleusercontent.com/s2/favicons?domain_url=${source.metadata.url}`} - width={16} - height={16} - alt="favicon" - className="rounded-lg h-4 w-4" - key={i} - /> - ))} + {sources.slice(3, 6).map((source, i) => { + return source.metadata.url === 'File' ? ( + <div className="bg-dark-200 hover:bg-dark-100 transition duration-200 flex items-center justify-center w-6 h-6 rounded-full"> + <File size={12} className="text-white/70" /> + </div> + ) : ( + <img + src={`https://s2.googleusercontent.com/s2/favicons?domain_url=${source.metadata.url}`} + width={16} + height={16} + alt="favicon" + className="rounded-lg h-4 w-4" + /> + ); + })} </div> <p className="text-xs text-black/50 dark:text-white/50"> View {sources.length - 3} more @@ -106,13 +118,19 @@ const MessageSources = ({ sources }: { sources: Document[] }) => { </p> <div className="flex flex-row items-center justify-between"> <div className="flex flex-row items-center space-x-1"> - <img - src={`https://s2.googleusercontent.com/s2/favicons?domain_url=${source.metadata.url}`} - width={16} - height={16} - alt="favicon" - className="rounded-lg h-4 w-4" - /> + {source.metadata.url === 'File' ? ( + <div className="bg-dark-200 hover:bg-dark-100 transition duration-200 flex items-center justify-center w-6 h-6 rounded-full"> + <File size={12} className="text-white/70" /> + </div> + ) : ( + <img + src={`https://s2.googleusercontent.com/s2/favicons?domain_url=${source.metadata.url}`} + width={16} + height={16} + alt="favicon" + className="rounded-lg h-4 w-4" + /> + )} <p className="text-xs text-black/50 dark:text-white/50 overflow-hidden whitespace-nowrap text-ellipsis"> {source.metadata.url.replace( /.+\/\/|www.|\..+/g, diff --git a/ui/package.json b/ui/package.json index 4d63027..445b9a3 100644 --- a/ui/package.json +++ b/ui/package.json @@ -11,7 +11,7 @@ "format:write": "prettier . --write" }, "dependencies": { - "@headlessui/react": "^2.1.9", + "@headlessui/react": "^2.2.0", "@icons-pack/react-simple-icons": "^9.4.0", "@langchain/openai": "^0.0.25", "@tailwindcss/typography": "^0.5.12", diff --git a/ui/yarn.lock b/ui/yarn.lock index 550a20c..0798ca9 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -74,9 +74,9 @@ "@floating-ui/utils" "^0.2.8" "@floating-ui/dom@^1.0.0": - version "1.6.11" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.11.tgz#8631857838d34ee5712339eb7cbdfb8ad34da723" - integrity sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ== + version "1.6.12" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.12.tgz#6333dcb5a8ead3b2bf82f33d6bc410e95f54e556" + integrity sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w== dependencies: "@floating-ui/core" "^1.6.0" "@floating-ui/utils" "^0.2.8" @@ -89,9 +89,9 @@ "@floating-ui/dom" "^1.0.0" "@floating-ui/react@^0.26.16": - version "0.26.24" - resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.24.tgz#072b9dfeca4e79ef4e3000ef1c28e0ffc86f4ed4" - integrity sha512-2ly0pCkZIGEQUq5H8bBK0XJmc1xIK/RM3tvVzY3GBER7IOD1UgmC2Y2tjj4AuS+TC+vTE1KJv2053290jua0Sw== + version "0.26.28" + resolved "https://registry.yarnpkg.com/@floating-ui/react/-/react-0.26.28.tgz#93f44ebaeb02409312e9df9507e83aab4a8c0dc7" + integrity sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw== dependencies: "@floating-ui/react-dom" "^2.1.2" "@floating-ui/utils" "^0.2.8" @@ -102,10 +102,10 @@ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62" integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig== -"@headlessui/react@^2.1.9": - version "2.1.9" - resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-2.1.9.tgz#d8d3ff64255177a87706cc4f24f42aeac65b1695" - integrity sha512-ckWw7vlKtnoa1fL2X0fx1a3t/Li9MIKDVXn3SgG65YlxvDAsNrY39PPCxVM7sQRA7go2fJsuHSSauKFNaJHH7A== +"@headlessui/react@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-2.2.0.tgz#a8e32f0899862849a1ce1615fa280e7891431ab7" + integrity sha512-RzCEg+LXsuI7mHiSomsu/gBJSjpupm6A1qIZ5sWjd7JhARNlMiSA4kKfJpCKwU9tE+zMRterhhrP74PvfJrpXQ== dependencies: "@floating-ui/react" "^0.26.16" "@react-aria/focus" "^3.17.1" @@ -317,20 +317,20 @@ integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== "@react-aria/focus@^3.17.1": - version "3.18.3" - resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.18.3.tgz#4fe32de1e7530beab8da2e7b89f0f17d22a47e5e" - integrity sha512-WKUElg+5zS0D3xlVn8MntNnkzJql2J6MuzAMP8Sv5WTgFDse/XGR842dsxPTIyKKdrWVCRegCuwa4m3n/GzgJw== + version "3.18.4" + resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.18.4.tgz#a6e95896bc8680d1b5bcd855e983fc2c195a1a55" + integrity sha512-91J35077w9UNaMK1cpMUEFRkNNz0uZjnSwiyBCFuRdaVuivO53wNC9XtWSDNDdcO5cGy87vfJRVAiyoCn/mjqA== dependencies: - "@react-aria/interactions" "^3.22.3" + "@react-aria/interactions" "^3.22.4" "@react-aria/utils" "^3.25.3" "@react-types/shared" "^3.25.0" "@swc/helpers" "^0.5.0" clsx "^2.0.0" -"@react-aria/interactions@^3.21.3", "@react-aria/interactions@^3.22.3": - version "3.22.3" - resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.22.3.tgz#3ba50db12f6ed443ae061eed79e41509eaa3d8e6" - integrity sha512-RRUb/aG+P0IKTIWikY/SylB6bIbLZeztnZY2vbe7RAG5MgVaCgn5HQ45SI15GlTmhsFG8CnF6slJsUFJiNHpbQ== +"@react-aria/interactions@^3.21.3", "@react-aria/interactions@^3.22.4": + version "3.22.4" + resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.22.4.tgz#88ed61ab6a485f869bc1f65ae6688d48ca96064b" + integrity sha512-E0vsgtpItmknq/MJELqYJwib+YN18Qag8nroqwjk1qOnBa9ROIkUhWJerLi1qs5diXq9LHKehZDXRlwPvdEFww== dependencies: "@react-aria/ssr" "^3.9.6" "@react-aria/utils" "^3.25.3" @@ -380,11 +380,11 @@ tslib "^2.4.0" "@swc/helpers@^0.5.0": - version "0.5.13" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.13.tgz#33e63ff3cd0cade557672bd7888a39ce7d115a8c" - integrity sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w== + version "0.5.15" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7" + integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== dependencies: - tslib "^2.4.0" + tslib "^2.8.0" "@tailwindcss/typography@^0.5.12": version "0.5.12" @@ -397,16 +397,16 @@ postcss-selector-parser "6.0.10" "@tanstack/react-virtual@^3.8.1": - version "3.10.8" - resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.10.8.tgz#bf4b06f157ed298644a96ab7efc1a2b01ab36e3c" - integrity sha512-VbzbVGSsZlQktyLrP5nxE+vE1ZR+U0NFAWPbJLoG2+DKPwd2D7dVICTVIIaYlJqX1ZCEnYDbaOpmMwbsyhBoIA== + version "3.10.9" + resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.10.9.tgz#40606b6dd8aba8e977f576d8f7df07f69ca63eea" + integrity sha512-OXO2uBjFqA4Ibr2O3y0YMnkrRWGVNqcvHQXmGvMu6IK8chZl3PrDxFXdGZ2iZkSrKh3/qUYoFqYe+Rx23RoU0g== dependencies: - "@tanstack/virtual-core" "3.10.8" + "@tanstack/virtual-core" "3.10.9" -"@tanstack/virtual-core@3.10.8": - version "3.10.8" - resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.10.8.tgz#975446a667755222f62884c19e5c3c66d959b8b4" - integrity sha512-PBu00mtt95jbKFi6Llk9aik8bnR3tR/oQP1o3TSi+iG//+Q2RTIzCEgKkHG8BB86kxMNW6O8wku+Lmi+QFR6jA== +"@tanstack/virtual-core@3.10.9": + version "3.10.9" + resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.10.9.tgz#55710c92b311fdaa8d8c66682a0dbdd684bc77c4" + integrity sha512-kBknKOKzmeR7lN+vSadaKWXaLS0SZZG+oqpQ/k80Q6g9REn6zRHS/ZYdrIzHnpHgy/eWs00SujveUN/GJT2qTw== "@types/json5@^0.0.29": version "0.0.29" @@ -3192,10 +3192,10 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.4.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== +tslib@^2.4.0, tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" diff --git a/uploads/.gitignore b/uploads/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/uploads/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/yarn.lock b/yarn.lock index deb35ea..0ea5916 100644 --- a/yarn.lock +++ b/yarn.lock @@ -576,6 +576,26 @@ "@types/range-parser" "*" "@types/send" "*" +"@types/express-serve-static-core@^5.0.0": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.1.tgz#3c9997ae9d00bc236e45c6374e84f2596458d9db" + integrity sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.0.tgz#13a7d1f75295e90d19ed6e74cab3678488eaa96c" + integrity sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^5.0.0" + "@types/qs" "*" + "@types/serve-static" "*" + "@types/express@^4.17.21": version "4.17.21" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" @@ -606,6 +626,13 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== +"@types/multer@^1.4.12": + version "1.4.12" + resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.12.tgz#da67bd0c809f3a63fe097c458c0d4af1fea50ab7" + integrity sha512-pQ2hoqvXiJt2FP9WQVLPRO+AmiIm/ZYkavPlIQnx282u4ZrVdztx0pkh3jjpQt0Kz+YI0YhSG264y08UJKoUQg== + dependencies: + "@types/express" "*" + "@types/node-fetch@^2.6.4": version "2.6.11" resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" @@ -708,6 +735,11 @@ optionalDependencies: onnxruntime-node "1.14.0" +"@xmldom/xmldom@^0.8.6": + version "0.8.10" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" + integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -758,6 +790,11 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +append-field@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" + integrity sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw== + arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -768,6 +805,13 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +argparse@~1.0.3: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -879,6 +923,11 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" +bluebird@~3.4.0: + version "3.4.7" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== + body-parser@1.20.2: version "1.20.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" @@ -925,6 +974,13 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +busboy@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -1070,6 +1126,16 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +concat-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + content-disposition@0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" @@ -1092,6 +1158,11 @@ cookie@0.6.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + cors@^2.8.5: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" @@ -1202,6 +1273,11 @@ digest-fetch@^1.3.0: base-64 "^0.1.0" md5 "^2.3.0" +dingbat-to-unicode@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dingbat-to-unicode/-/dingbat-to-unicode-1.0.1.tgz#5091dd673241453e6b5865e26e5a4452cdef5c83" + integrity sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w== + dom-serializer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" @@ -1251,6 +1327,13 @@ drizzle-orm@^0.31.2: resolved "https://registry.yarnpkg.com/drizzle-orm/-/drizzle-orm-0.31.2.tgz#221a257dd487bab49ddb88a17bd82388600cf655" integrity sha512-QnenevbnnAzmbNzQwbhklvIYrDE8YER8K7kSrAWQSV1YvFCdSQPzj+jzqRdTSsV2cDqSpQ0NXGyL1G9I43LDLg== +duck@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/duck/-/duck-0.1.12.tgz#de7adf758421230b6d7aee799ce42670586b9efa" + integrity sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg== + dependencies: + underscore "^1.13.1" + ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -1657,7 +1740,12 @@ ignore-by-default@^1.0.1: resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== -inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4: +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + +inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1716,6 +1804,11 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + js-tiktoken@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.12.tgz#af0f5cf58e5e7318240d050c8413234019424211" @@ -1742,6 +1835,16 @@ jsonpointer@^5.0.1: resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== +jszip@^3.7.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" + kuler@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" @@ -1825,6 +1928,13 @@ leac@^0.6.0: resolved "https://registry.yarnpkg.com/leac/-/leac-0.6.0.tgz#dcf136e382e666bd2475f44a1096061b70dc0912" integrity sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg== +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + lodash.set@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" @@ -1847,6 +1957,15 @@ long@^4.0.0: resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== +lop@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/lop/-/lop-0.4.2.tgz#c9c2f958a39b9da1c2f36ca9ad66891a9fe84640" + integrity sha512-RefILVDQ4DKoRZsJ4Pj22TxE3omDO47yFpkIBoDKzkqPRISs5U1cnAdg/5583YPkWPaLIYHOKRMQSvjFsO26cw== + dependencies: + duck "^0.1.12" + option "~0.2.1" + underscore "^1.13.1" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -1859,6 +1978,22 @@ make-error@^1.1.1: resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +mammoth@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/mammoth/-/mammoth-1.8.0.tgz#d8f1b0d3a0355fda129270346e9dc853f223028f" + integrity sha512-pJNfxSk9IEGVpau+tsZFz22ofjUsl2mnA5eT8PjPs2n0BP+rhVte4Nez6FdgEuxv3IGI3afiV46ImKqTGDVlbA== + dependencies: + "@xmldom/xmldom" "^0.8.6" + argparse "~1.0.3" + base64-js "^1.5.1" + bluebird "~3.4.0" + dingbat-to-unicode "^1.0.1" + jszip "^3.7.1" + lop "^0.4.1" + path-is-absolute "^1.0.0" + underscore "^1.13.1" + xmlbuilder "^10.0.0" + md5@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" @@ -1912,7 +2047,7 @@ minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.3: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -1922,6 +2057,13 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== +mkdirp@^0.5.4: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + ml-array-mean@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/ml-array-mean/-/ml-array-mean-1.1.6.tgz#d951a700dc8e3a17b3e0a583c2c64abd0c619c56" @@ -1973,6 +2115,19 @@ ms@2.1.3, ms@^2.0.0, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +multer@^1.4.5-lts.1: + version "1.4.5-lts.1" + resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.5-lts.1.tgz#803e24ad1984f58edffbc79f56e305aec5cfd1ac" + integrity sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ== + dependencies: + append-field "^1.0.0" + busboy "^1.0.0" + concat-stream "^1.5.2" + mkdirp "^0.5.4" + object-assign "^4.1.1" + type-is "^1.6.4" + xtend "^4.0.0" + mustache@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" @@ -2050,7 +2205,7 @@ num-sort@^2.0.0: resolved "https://registry.yarnpkg.com/num-sort/-/num-sort-2.1.0.tgz#1cbb37aed071329fdf41151258bc011898577a9b" integrity sha512-1MQz1Ed8z2yckoBeSfkQHHO9K1yDRxxtotKSJ9yvcTUUxSvfvzEq5GwBrjjHEpMlq/k5gvXdmJ1SbYxWtpNoVg== -object-assign@^4: +object-assign@^4, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -2146,6 +2301,11 @@ openapi-types@^12.1.3: resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-12.1.3.tgz#471995eb26c4b97b7bd356aacf7b91b73e777dd3" integrity sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw== +option@~0.2.1: + version "0.2.4" + resolved "https://registry.yarnpkg.com/option/-/option-0.2.4.tgz#fd475cdf98dcabb3cb397a3ba5284feb45edbfe4" + integrity sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A== + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -2174,6 +2334,11 @@ p-timeout@^3.2.0: dependencies: p-finally "^1.0.0" +pako@~1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + parseley@^0.12.0: version "0.12.1" resolved "https://registry.yarnpkg.com/parseley/-/parseley-0.12.1.tgz#4afd561d50215ebe259e3e7a853e62f600683aef" @@ -2187,6 +2352,11 @@ parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -2238,6 +2408,11 @@ prettier@^3.2.5: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + protobufjs@^6.8.8: version "6.11.4" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" @@ -2320,6 +2495,19 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +readable-stream@^2.2.2, readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" @@ -2351,7 +2539,7 @@ safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.1: +safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -2421,6 +2609,11 @@ set-function-length@^1.2.1: gopd "^1.0.1" has-property-descriptors "^1.0.2" +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + setprototypeof@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -2491,6 +2684,11 @@ source-map@^0.6.0: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + stack-trace@0.0.x: version "0.0.10" resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" @@ -2501,6 +2699,11 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + streamx@^2.15.0, streamx@^2.16.1: version "2.16.1" resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.16.1.tgz#2b311bd34832f08aa6bb4d6a80297c9caef89614" @@ -2518,6 +2721,13 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -2636,7 +2846,7 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -type-is@~1.6.18: +type-is@^1.6.4, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -2644,6 +2854,11 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + typescript@^5.4.3: version "5.4.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" @@ -2654,6 +2869,11 @@ undefsafe@^2.0.5: resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== +underscore@^1.13.1: + version "1.13.7" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.7.tgz#970e33963af9a7dda228f17ebe8399e5fbe63a10" + integrity sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g== + undici-types@~5.26.4: version "5.26.5" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" @@ -2664,7 +2884,7 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -util-deprecate@^1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== @@ -2763,6 +2983,16 @@ ws@^8.17.1: resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== +xmlbuilder@^10.0.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-10.1.1.tgz#8cae6688cc9b38d850b7c8d3c0a4161dcaf475b0" + integrity sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg== + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" From be745501aacbd56449e2fc0d872ce8a0bf3d8870 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Mon, 25 Nov 2024 12:23:23 +0530 Subject: [PATCH 084/115] feat(package): bump version --- package.json | 2 +- ui/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 3a3a1cc..6a67746 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "perplexica-backend", - "version": "1.9.3", + "version": "1.10.0-rc1", "license": "MIT", "author": "ItzCrazyKns", "scripts": { diff --git a/ui/package.json b/ui/package.json index 445b9a3..6e4fc42 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,6 +1,6 @@ { "name": "perplexica-frontend", - "version": "1.9.3", + "version": "1.10.0-rc1", "license": "MIT", "author": "ItzCrazyKns", "scripts": { From 64ee19c70a451e78a90d230fe645a158c1e5060b Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Mon, 25 Nov 2024 12:34:37 +0530 Subject: [PATCH 085/115] feat(messageHandler): switch to webSearch mode if files --- src/websocket/messageHandler.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/websocket/messageHandler.ts b/src/websocket/messageHandler.ts index d2a2518..06ea3da 100644 --- a/src/websocket/messageHandler.ts +++ b/src/websocket/messageHandler.ts @@ -108,6 +108,11 @@ export const handleMessage = async ( const parsedWSMessage = JSON.parse(message) as WSMessage; const parsedMessage = parsedWSMessage.message; + if (parsedWSMessage.files.length > 0) { + /* TODO: Implement uploads in other classes/single meta class system*/ + parsedWSMessage.focusMode = 'webSearch'; + } + const humanMessageId = parsedMessage.messageId ?? crypto.randomBytes(7).toString('hex'); const aiMessageId = crypto.randomBytes(7).toString('hex'); From ecad0655779e75699223d0a7ff7e0775491e6345 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Wed, 27 Nov 2024 15:13:46 +0530 Subject: [PATCH 086/115] feat(searchAgent): handle empty fileIds --- src/agents/webSearchAgent.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/agents/webSearchAgent.ts b/src/agents/webSearchAgent.ts index 4303762..709d6aa 100644 --- a/src/agents/webSearchAgent.ts +++ b/src/agents/webSearchAgent.ts @@ -485,7 +485,7 @@ const basicWebSearch = ( llm: BaseChatModel, embeddings: Embeddings, optimizationMode: 'speed' | 'balanced' | 'quality', - fileIds: string[], + fileIds: string[] = [], ) => { const emitter = new eventEmitter(); From 177746235a347e1468ade07a7ef425d4011a0bc2 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 28 Nov 2024 20:47:18 +0530 Subject: [PATCH 087/115] feat(providers): add gemini --- package.json | 1 + sample.config.toml | 1 + src/config.ts | 3 ++ src/lib/providers/gemini.ts | 69 ++++++++++++++++++++++++++++++++ src/lib/providers/index.ts | 3 ++ src/routes/config.ts | 5 ++- ui/components/SettingsDialog.tsx | 17 ++++++++ yarn.lock | 53 ++++++++++++++++++++++++ 8 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 src/lib/providers/gemini.ts diff --git a/package.json b/package.json index 6a67746..0368b21 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "@langchain/anthropic": "^0.2.3", "@langchain/community": "^0.2.16", "@langchain/openai": "^0.0.25", + "@langchain/google-genai": "^0.0.23", "@xenova/transformers": "^2.17.1", "axios": "^1.6.8", "better-sqlite3": "^11.0.0", diff --git a/sample.config.toml b/sample.config.toml index dddcc03..50ba95d 100644 --- a/sample.config.toml +++ b/sample.config.toml @@ -7,6 +7,7 @@ KEEP_ALIVE = "5m" # How long to keep Ollama models loaded into memory. (Instead OPENAI = "" # OpenAI API key - sk-1234567890abcdef1234567890abcdef GROQ = "" # Groq API key - gsk_1234567890abcdef1234567890abcdef ANTHROPIC = "" # Anthropic API key - sk-ant-1234567890abcdef1234567890abcdef +GEMINI = "" # Gemini API key - sk-1234567890abcdef1234567890abcdef [API_ENDPOINTS] SEARXNG = "http://localhost:32768" # SearxNG API URL diff --git a/src/config.ts b/src/config.ts index 8624e7f..001c259 100644 --- a/src/config.ts +++ b/src/config.ts @@ -14,6 +14,7 @@ interface Config { OPENAI: string; GROQ: string; ANTHROPIC: string; + GEMINI: string; }; API_ENDPOINTS: { SEARXNG: string; @@ -43,6 +44,8 @@ export const getGroqApiKey = () => loadConfig().API_KEYS.GROQ; export const getAnthropicApiKey = () => loadConfig().API_KEYS.ANTHROPIC; +export const getGeminiApiKey = () => loadConfig().API_KEYS.GEMINI; + export const getSearxngApiEndpoint = () => process.env.SEARXNG_API_URL || loadConfig().API_ENDPOINTS.SEARXNG; diff --git a/src/lib/providers/gemini.ts b/src/lib/providers/gemini.ts new file mode 100644 index 0000000..95764cf --- /dev/null +++ b/src/lib/providers/gemini.ts @@ -0,0 +1,69 @@ +import { + ChatGoogleGenerativeAI, + GoogleGenerativeAIEmbeddings, +} from '@langchain/google-genai'; +import { getGeminiApiKey } from '../../config'; +import logger from '../../utils/logger'; + +export const loadGeminiChatModels = async () => { + const geminiApiKey = getGeminiApiKey(); + + if (!geminiApiKey) return {}; + + try { + const chatModels = { + 'gemini-1.5-flash': { + displayName: 'Gemini 1.5 Flash', + model: new ChatGoogleGenerativeAI({ + modelName: 'gemini-1.5-flash', + temperature: 0.7, + apiKey: geminiApiKey, + }), + }, + 'gemini-1.5-flash-8b': { + displayName: 'Gemini 1.5 Flash 8B', + model: new ChatGoogleGenerativeAI({ + modelName: 'gemini-1.5-flash-8b', + temperature: 0.7, + apiKey: geminiApiKey, + }), + }, + 'gemini-1.5-pro': { + displayName: 'Gemini 1.5 Pro', + model: new ChatGoogleGenerativeAI({ + modelName: 'gemini-1.5-pro', + temperature: 0.7, + apiKey: geminiApiKey, + }), + }, + }; + + return chatModels; + } catch (err) { + logger.error(`Error loading Gemini models: ${err}`); + return {}; + } +}; + +export const loadGeminiEmbeddingsModels = async () => { + const geminiApiKey = getGeminiApiKey(); + + if (!geminiApiKey) return {}; + + try { + const embeddingModels = { + 'text-embedding-004': { + displayName: 'Text Embedding', + model: new GoogleGenerativeAIEmbeddings({ + apiKey: geminiApiKey, + modelName: 'text-embedding-004', + }), + }, + }; + + return embeddingModels; + } catch (err) { + logger.error(`Error loading Gemini embeddings model: ${err}`); + return {}; + } +}; diff --git a/src/lib/providers/index.ts b/src/lib/providers/index.ts index d919fd4..98846e7 100644 --- a/src/lib/providers/index.ts +++ b/src/lib/providers/index.ts @@ -3,18 +3,21 @@ import { loadOllamaChatModels, loadOllamaEmbeddingsModels } from './ollama'; import { loadOpenAIChatModels, loadOpenAIEmbeddingsModels } from './openai'; import { loadAnthropicChatModels } from './anthropic'; import { loadTransformersEmbeddingsModels } from './transformers'; +import { loadGeminiChatModels, loadGeminiEmbeddingsModels } from './gemini'; const chatModelProviders = { openai: loadOpenAIChatModels, groq: loadGroqChatModels, ollama: loadOllamaChatModels, anthropic: loadAnthropicChatModels, + gemini: loadGeminiChatModels, }; const embeddingModelProviders = { openai: loadOpenAIEmbeddingsModels, local: loadTransformersEmbeddingsModels, ollama: loadOllamaEmbeddingsModels, + gemini: loadGeminiEmbeddingsModels, }; export const getAvailableChatModelProviders = async () => { diff --git a/src/routes/config.ts b/src/routes/config.ts index f635e4b..38192b7 100644 --- a/src/routes/config.ts +++ b/src/routes/config.ts @@ -7,6 +7,7 @@ import { getGroqApiKey, getOllamaApiEndpoint, getAnthropicApiKey, + getGeminiApiKey, getOpenaiApiKey, updateConfig, } from '../config'; @@ -52,7 +53,8 @@ router.get('/', async (_, res) => { config['ollamaApiUrl'] = getOllamaApiEndpoint(); config['anthropicApiKey'] = getAnthropicApiKey(); config['groqApiKey'] = getGroqApiKey(); - + config['geminiApiKey'] = getGeminiApiKey(); + res.status(200).json(config); } catch (err: any) { res.status(500).json({ message: 'An error has occurred.' }); @@ -68,6 +70,7 @@ router.post('/', async (req, res) => { OPENAI: config.openaiApiKey, GROQ: config.groqApiKey, ANTHROPIC: config.anthropicApiKey, + GEMINI: config.geminiApiKey, }, API_ENDPOINTS: { OLLAMA: config.ollamaApiUrl, diff --git a/ui/components/SettingsDialog.tsx b/ui/components/SettingsDialog.tsx index 716dd7d..163857b 100644 --- a/ui/components/SettingsDialog.tsx +++ b/ui/components/SettingsDialog.tsx @@ -63,6 +63,7 @@ interface SettingsType { openaiApiKey: string; groqApiKey: string; anthropicApiKey: string; + geminiApiKey: string; ollamaApiUrl: string; } @@ -476,6 +477,22 @@ const SettingsDialog = ({ } /> </div> + <div className="flex flex-col space-y-1"> + <p className="text-black/70 dark:text-white/70 text-sm"> + Gemini API Key + </p> + <Input + type="text" + placeholder="Gemini API key" + defaultValue={config.geminiApiKey} + onChange={(e) => + setConfig({ + ...config, + geminiApiKey: e.target.value, + }) + } + /> + </div> </div> )} {isLoading && ( diff --git a/yarn.lock b/yarn.lock index 0ea5916..5764b3c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -293,6 +293,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== +"@google/generative-ai@^0.7.0": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@google/generative-ai/-/generative-ai-0.7.1.tgz#eb187c75080c0706245699dbc06816c830d8c6a7" + integrity sha512-WTjMLLYL/xfA5BW6xAycRPiAX7FNHKAxrid/ayqC1QMam0KAK0NbMeS9Lubw80gVg5xFMLE+H7pw4wdNzTOlxw== + "@huggingface/jinja@^0.2.2": version "0.2.2" resolved "https://registry.yarnpkg.com/@huggingface/jinja/-/jinja-0.2.2.tgz#faeb205a9d6995089bef52655ddd8245d3190627" @@ -380,6 +385,23 @@ zod "^3.22.4" zod-to-json-schema "^3.22.3" +"@langchain/core@>=0.2.16 <0.3.0": + version "0.2.36" + resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.2.36.tgz#75754c33aa5b9310dcf117047374a1ae011005a4" + integrity sha512-qHLvScqERDeH7y2cLuJaSAlMwg3f/3Oc9nayRSXRU2UuaK/SOhI42cxiPLj1FnuHJSmN0rBQFkrLx02gI4mcVg== + dependencies: + ansi-styles "^5.0.0" + camelcase "6" + decamelize "1.2.0" + js-tiktoken "^1.0.12" + langsmith "^0.1.56-rc.1" + mustache "^4.2.0" + p-queue "^6.6.2" + p-retry "4" + uuid "^10.0.0" + zod "^3.22.4" + zod-to-json-schema "^3.22.3" + "@langchain/core@>=0.2.9 <0.3.0": version "0.2.15" resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.2.15.tgz#1bb99ac4fffe935c7ba37edcaa91abfba3c82219" @@ -415,6 +437,15 @@ zod "^3.22.4" zod-to-json-schema "^3.22.3" +"@langchain/google-genai@^0.0.23": + version "0.0.23" + resolved "https://registry.yarnpkg.com/@langchain/google-genai/-/google-genai-0.0.23.tgz#e73af501bc1df4c7642b531759b82dc3eb7ae459" + integrity sha512-MTSCJEoKsfU1inz0PWvAjITdNFM4s41uvBCwLpcgx3jWJIEisczFD82x86ahYqJlb2fD6tohYSaCH/4tKAdkXA== + dependencies: + "@google/generative-ai" "^0.7.0" + "@langchain/core" ">=0.2.16 <0.3.0" + zod-to-json-schema "^3.22.4" + "@langchain/openai@^0.0.25", "@langchain/openai@~0.0.19": version "0.0.25" resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.0.25.tgz#8332abea1e3acb9b1169f90636e518c0ee90622e" @@ -712,6 +743,11 @@ resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== +"@types/uuid@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-10.0.0.tgz#e9c07fe50da0f53dc24970cca94d619ff03f6f6d" + integrity sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ== + "@types/uuid@^9.0.1": version "9.0.8" resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" @@ -1900,6 +1936,18 @@ langchainhub@~0.0.8: resolved "https://registry.yarnpkg.com/langchainhub/-/langchainhub-0.0.8.tgz#fd4b96dc795e22e36c1a20bad31b61b0c33d3110" integrity sha512-Woyb8YDHgqqTOZvWIbm2CaFDGfZ4NTSyXV687AG4vXEfoNo7cGQp7nhl7wL3ehenKWmNEmcxCLgOZzW8jE6lOQ== +langsmith@^0.1.56-rc.1: + version "0.1.68" + resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.1.68.tgz#848332e822fe5e6734a07f1c36b6530cc1798afb" + integrity sha512-otmiysWtVAqzMx3CJ4PrtUBhWRG5Co8Z4o7hSZENPjlit9/j3/vm3TSvbaxpDYakZxtMjhkcJTqrdYFipISEiQ== + dependencies: + "@types/uuid" "^10.0.0" + commander "^10.0.1" + p-queue "^6.6.2" + p-retry "4" + semver "^7.6.3" + uuid "^10.0.0" + langsmith@~0.1.1, langsmith@~0.1.7: version "0.1.14" resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.1.14.tgz#2b889dbcfb49547614df276a4a5a063092a1585d" @@ -2568,6 +2616,11 @@ semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: dependencies: lru-cache "^6.0.0" +semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" From 92f66266b0a0fafd153ad653708105511c10e88d Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 29 Nov 2024 18:05:28 +0530 Subject: [PATCH 088/115] feat(agents): add a unified agent --- src/search/metaSearchAgent.ts | 486 ++++++++++++++++++++++++++++++++++ 1 file changed, 486 insertions(+) create mode 100644 src/search/metaSearchAgent.ts diff --git a/src/search/metaSearchAgent.ts b/src/search/metaSearchAgent.ts new file mode 100644 index 0000000..0dde085 --- /dev/null +++ b/src/search/metaSearchAgent.ts @@ -0,0 +1,486 @@ +import { ChatOpenAI } from '@langchain/openai'; +import type { BaseChatModel } from '@langchain/core/language_models/chat_models'; +import type { Embeddings } from '@langchain/core/embeddings'; +import { + ChatPromptTemplate, + MessagesPlaceholder, + PromptTemplate, +} from '@langchain/core/prompts'; +import { + RunnableLambda, + RunnableMap, + RunnableSequence, +} from '@langchain/core/runnables'; +import { BaseMessage } from '@langchain/core/messages'; +import { StringOutputParser } from '@langchain/core/output_parsers'; +import LineListOutputParser from '../lib/outputParsers/listLineOutputParser'; +import LineOutputParser from '../lib/outputParsers/lineOutputParser'; +import { getDocumentsFromLinks } from '../utils/documents'; +import { Document } from 'langchain/document'; +import { searchSearxng } from '../lib/searxng'; +import path from 'path'; +import fs from 'fs'; +import computeSimilarity from '../utils/computeSimilarity'; +import formatChatHistoryAsString from '../utils/formatHistory'; +import eventEmitter from 'events'; +import { StreamEvent } from '@langchain/core/tracers/log_stream'; +import { IterableReadableStream } from '@langchain/core/utils/stream'; + +export interface MetaSearchAgentType { + searchAndAnswer: ( + message: string, + history: BaseMessage[], + llm: BaseChatModel, + embeddings: Embeddings, + optimizationMode: 'speed' | 'balanced' | 'quality', + fileIds: string[], + ) => Promise<eventEmitter>; +} + +interface Config { + searchWeb: boolean; + rerank: boolean; + summarizer: boolean; + rerankThreshold: number; + queryGeneratorPrompt: string; + responsePrompt: string; + activeEngines: string[]; +} + +type BasicChainInput = { + chat_history: BaseMessage[]; + query: string; +}; + +class MetaSearchAgent implements MetaSearchAgentType { + private config: Config; + private strParser = new StringOutputParser(); + + constructor(config: Config) { + this.config = config; + } + + private async createSearchRetrieverChain(llm: BaseChatModel) { + (llm as unknown as ChatOpenAI).temperature = 0; + + return RunnableSequence.from([ + PromptTemplate.fromTemplate(this.config.queryGeneratorPrompt), + llm, + this.strParser, + RunnableLambda.from(async (input: string) => { + const linksOutputParser = new LineListOutputParser({ + key: 'links', + }); + + const questionOutputParser = new LineOutputParser({ + key: 'question', + }); + + const links = await linksOutputParser.parse(input); + let question = this.config.summarizer + ? await questionOutputParser.parse(input) + : input; + + if (question === 'not_needed') { + return { query: '', docs: [] }; + } + + if (links.length > 0) { + if (question.length === 0) { + question = 'summarize'; + } + + let docs = []; + + const linkDocs = await getDocumentsFromLinks({ links }); + + const docGroups: Document[] = []; + + linkDocs.map((doc) => { + const URLDocExists = docGroups.find( + (d) => + d.metadata.url === doc.metadata.url && + d.metadata.totalDocs < 10, + ); + + if (!URLDocExists) { + docGroups.push({ + ...doc, + metadata: { + ...doc.metadata, + totalDocs: 1, + }, + }); + } + + const docIndex = docGroups.findIndex( + (d) => + d.metadata.url === doc.metadata.url && + d.metadata.totalDocs < 10, + ); + + if (docIndex !== -1) { + docGroups[docIndex].pageContent = + docGroups[docIndex].pageContent + `\n\n` + doc.pageContent; + docGroups[docIndex].metadata.totalDocs += 1; + } + }); + + await Promise.all( + docGroups.map(async (doc) => { + const res = await llm.invoke(` + You are a web search summarizer, tasked with summarizing a piece of text retrieved from a web search. Your job is to summarize the + text into a detailed, 2-4 paragraph explanation that captures the main ideas and provides a comprehensive answer to the query. + If the query is \"summarize\", you should provide a detailed summary of the text. If the query is a specific question, you should answer it in the summary. + + - **Journalistic tone**: The summary should sound professional and journalistic, not too casual or vague. + - **Thorough and detailed**: Ensure that every key point from the text is captured and that the summary directly answers the query. + - **Not too lengthy, but detailed**: The summary should be informative but not excessively long. Focus on providing detailed information in a concise format. + + The text will be shared inside the \`text\` XML tag, and the query inside the \`query\` XML tag. + + <example> + 1. \`<text> + Docker is a set of platform-as-a-service products that use OS-level virtualization to deliver software in packages called containers. + It was first released in 2013 and is developed by Docker, Inc. Docker is designed to make it easier to create, deploy, and run applications + by using containers. + </text> + + <query> + What is Docker and how does it work? + </query> + + Response: + Docker is a revolutionary platform-as-a-service product developed by Docker, Inc., that uses container technology to make application + deployment more efficient. It allows developers to package their software with all necessary dependencies, making it easier to run in + any environment. Released in 2013, Docker has transformed the way applications are built, deployed, and managed. + \` + 2. \`<text> + The theory of relativity, or simply relativity, encompasses two interrelated theories of Albert Einstein: special relativity and general + relativity. However, the word "relativity" is sometimes used in reference to Galilean invariance. The term "theory of relativity" was based + on the expression "relative theory" used by Max Planck in 1906. The theory of relativity usually encompasses two interrelated theories by + Albert Einstein: special relativity and general relativity. Special relativity applies to all physical phenomena in the absence of gravity. + General relativity explains the law of gravitation and its relation to other forces of nature. It applies to the cosmological and astrophysical + realm, including astronomy. + </text> + + <query> + summarize + </query> + + Response: + The theory of relativity, developed by Albert Einstein, encompasses two main theories: special relativity and general relativity. Special + relativity applies to all physical phenomena in the absence of gravity, while general relativity explains the law of gravitation and its + relation to other forces of nature. The theory of relativity is based on the concept of "relative theory," as introduced by Max Planck in + 1906. It is a fundamental theory in physics that has revolutionized our understanding of the universe. + \` + </example> + + Everything below is the actual data you will be working with. Good luck! + + <query> + ${question} + </query> + + <text> + ${doc.pageContent} + </text> + + Make sure to answer the query in the summary. + `); + + const document = new Document({ + pageContent: res.content as string, + metadata: { + title: doc.metadata.title, + url: doc.metadata.url, + }, + }); + + docs.push(document); + }), + ); + + return { query: question, docs: docs }; + } else { + const res = await searchSearxng(question, { + language: 'en', + engines: this.config.activeEngines, + }); + + const documents = res.results.map( + (result) => + new Document({ + pageContent: result.content, + metadata: { + title: result.title, + url: result.url, + ...(result.img_src && { img_src: result.img_src }), + }, + }), + ); + + return { query: question, docs: documents }; + } + }), + ]); + } + + private async createAnsweringChain( + llm: BaseChatModel, + fileIds: string[], + embeddings: Embeddings, + optimizationMode: 'speed' | 'balanced' | 'quality', + ) { + return RunnableSequence.from([ + RunnableMap.from({ + query: (input: BasicChainInput) => input.query, + chat_history: (input: BasicChainInput) => input.chat_history, + context: RunnableLambda.from(async (input: BasicChainInput) => { + const processedHistory = formatChatHistoryAsString( + input.chat_history, + ); + + let docs: Document[] | null = null; + let query = input.query; + + if (this.config.searchWeb) { + const searchRetrieverChain = + await this.createSearchRetrieverChain(llm); + + const searchRetrieverResult = await searchRetrieverChain.invoke({ + chat_history: processedHistory, + query, + }); + + query = searchRetrieverResult.query; + docs = searchRetrieverResult.docs; + } + + const sortedDocs = await this.rerankDocs( + query, + docs ?? [], + fileIds, + embeddings, + optimizationMode, + ); + + return sortedDocs; + }) + .withConfig({ + runName: 'FinalSourceRetriever', + }) + .pipe(this.processDocs), + }), + ChatPromptTemplate.fromMessages([ + ['system', this.config.responsePrompt], + new MessagesPlaceholder('chat_history'), + ['user', '{query}'], + ]), + llm, + this.strParser, + ]).withConfig({ + runName: 'FinalResponseGenerator', + }); + } + + private async rerankDocs( + query: string, + docs: Document[], + fileIds: string[], + embeddings: Embeddings, + optimizationMode: 'speed' | 'balanced' | 'quality', + ) { + if (docs.length === 0 && fileIds.length === 0) { + return docs; + } + + const filesData = fileIds + .map((file) => { + const filePath = path.join(process.cwd(), 'uploads', file); + + const contentPath = filePath + '-extracted.json'; + const embeddingsPath = filePath + '-embeddings.json'; + + const content = JSON.parse(fs.readFileSync(contentPath, 'utf8')); + const embeddings = JSON.parse(fs.readFileSync(embeddingsPath, 'utf8')); + + const fileSimilaritySearchObject = content.contents.map( + (c: string, i) => { + return { + fileName: content.title, + content: c, + embeddings: embeddings.embeddings[i], + }; + }, + ); + + return fileSimilaritySearchObject; + }) + .flat(); + + if (query.toLocaleLowerCase() === 'summarize') { + return docs.slice(0, 15); + } + + const docsWithContent = docs.filter( + (doc) => doc.pageContent && doc.pageContent.length > 0, + ); + + if (optimizationMode === 'speed' || this.config.rerank === false) { + if (filesData.length > 0) { + const [queryEmbedding] = await Promise.all([ + embeddings.embedQuery(query), + ]); + + const fileDocs = filesData.map((fileData) => { + return new Document({ + pageContent: fileData.content, + metadata: { + title: fileData.fileName, + url: `File`, + }, + }); + }); + + const similarity = filesData.map((fileData, i) => { + const sim = computeSimilarity(queryEmbedding, fileData.embeddings); + + return { + index: i, + similarity: sim, + }; + }); + + let sortedDocs = similarity + .filter( + (sim) => sim.similarity > (this.config.rerankThreshold ?? 0.3), + ) + .sort((a, b) => b.similarity - a.similarity) + .slice(0, 15) + .map((sim) => fileDocs[sim.index]); + + sortedDocs = + docsWithContent.length > 0 ? sortedDocs.slice(0, 8) : sortedDocs; + + return [ + ...sortedDocs, + ...docsWithContent.slice(0, 15 - sortedDocs.length), + ]; + } else { + return docsWithContent.slice(0, 15); + } + } else if (optimizationMode === 'balanced') { + const [docEmbeddings, queryEmbedding] = await Promise.all([ + embeddings.embedDocuments( + docsWithContent.map((doc) => doc.pageContent), + ), + embeddings.embedQuery(query), + ]); + + docsWithContent.push( + ...filesData.map((fileData) => { + return new Document({ + pageContent: fileData.content, + metadata: { + title: fileData.fileName, + url: `File`, + }, + }); + }), + ); + + docEmbeddings.push(...filesData.map((fileData) => fileData.embeddings)); + + const similarity = docEmbeddings.map((docEmbedding, i) => { + const sim = computeSimilarity(queryEmbedding, docEmbedding); + + return { + index: i, + similarity: sim, + }; + }); + + const sortedDocs = similarity + .filter((sim) => sim.similarity > (this.config.rerankThreshold ?? 0.3)) + .sort((a, b) => b.similarity - a.similarity) + .slice(0, 15) + .map((sim) => docsWithContent[sim.index]); + + return sortedDocs; + } + } + + private processDocs(docs: Document[]) { + return docs + .map((_, index) => `${index + 1}. ${docs[index].pageContent}`) + .join('\n'); + } + + private async handleStream( + stream: IterableReadableStream<StreamEvent>, + emitter: eventEmitter, + ) { + for await (const event of stream) { + if ( + event.event === 'on_chain_end' && + event.name === 'FinalSourceRetriever' + ) { + ``; + emitter.emit( + 'data', + JSON.stringify({ type: 'sources', data: event.data.output }), + ); + } + if ( + event.event === 'on_chain_stream' && + event.name === 'FinalResponseGenerator' + ) { + emitter.emit( + 'data', + JSON.stringify({ type: 'response', data: event.data.chunk }), + ); + } + if ( + event.event === 'on_chain_end' && + event.name === 'FinalResponseGenerator' + ) { + emitter.emit('end'); + } + } + } + + async searchAndAnswer( + message: string, + history: BaseMessage[], + llm: BaseChatModel, + embeddings: Embeddings, + optimizationMode: 'speed' | 'balanced' | 'quality', + fileIds: string[], + ) { + const emitter = new eventEmitter(); + + const answeringChain = await this.createAnsweringChain( + llm, + fileIds, + embeddings, + optimizationMode, + ); + + const stream = answeringChain.streamEvents( + { + chat_history: history, + query: message, + }, + { + version: 'v1', + }, + ); + + this.handleStream(stream, emitter); + + return emitter; + } +} + +export default MetaSearchAgent; From dc4a843d8a3aaa76d5675ac34be9df2ab3247b44 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 29 Nov 2024 18:06:00 +0530 Subject: [PATCH 089/115] feat(agents): switch to `MetaSearchAgent` --- src/agents/academicSearchAgent.ts | 280 --------- src/agents/redditSearchAgent.ts | 276 --------- src/agents/webSearchAgent.ts | 541 ------------------ src/agents/wolframAlphaSearchAgent.ts | 220 ------- src/agents/writingAssistant.ts | 91 --- src/agents/youtubeSearchAgent.ts | 277 --------- src/{agents => chains}/imageSearchAgent.ts | 0 .../suggestionGeneratorAgent.ts | 0 src/{agents => chains}/videoSearchAgent.ts | 0 src/prompts/academicSearch.ts | 42 ++ src/prompts/index.ts | 32 ++ src/prompts/redditSearch.ts | 42 ++ src/prompts/webSearch.ts | 86 +++ src/prompts/wolframAlpha.ts | 42 ++ src/prompts/writingAssistant.ts | 13 + src/prompts/youtubeSearch.ts | 42 ++ src/routes/images.ts | 2 +- src/routes/search.ts | 10 +- src/routes/suggestions.ts | 2 +- src/routes/videos.ts | 2 +- src/websocket/messageHandler.ts | 169 ++++-- 21 files changed, 418 insertions(+), 1751 deletions(-) delete mode 100644 src/agents/academicSearchAgent.ts delete mode 100644 src/agents/redditSearchAgent.ts delete mode 100644 src/agents/webSearchAgent.ts delete mode 100644 src/agents/wolframAlphaSearchAgent.ts delete mode 100644 src/agents/writingAssistant.ts delete mode 100644 src/agents/youtubeSearchAgent.ts rename src/{agents => chains}/imageSearchAgent.ts (100%) rename src/{agents => chains}/suggestionGeneratorAgent.ts (100%) rename src/{agents => chains}/videoSearchAgent.ts (100%) create mode 100644 src/prompts/academicSearch.ts create mode 100644 src/prompts/index.ts create mode 100644 src/prompts/redditSearch.ts create mode 100644 src/prompts/webSearch.ts create mode 100644 src/prompts/wolframAlpha.ts create mode 100644 src/prompts/writingAssistant.ts create mode 100644 src/prompts/youtubeSearch.ts diff --git a/src/agents/academicSearchAgent.ts b/src/agents/academicSearchAgent.ts deleted file mode 100644 index bad4065..0000000 --- a/src/agents/academicSearchAgent.ts +++ /dev/null @@ -1,280 +0,0 @@ -import { BaseMessage } from '@langchain/core/messages'; -import { - PromptTemplate, - ChatPromptTemplate, - MessagesPlaceholder, -} from '@langchain/core/prompts'; -import { - RunnableSequence, - RunnableMap, - RunnableLambda, -} from '@langchain/core/runnables'; -import { StringOutputParser } from '@langchain/core/output_parsers'; -import { Document } from '@langchain/core/documents'; -import { searchSearxng } from '../lib/searxng'; -import type { StreamEvent } from '@langchain/core/tracers/log_stream'; -import type { BaseChatModel } from '@langchain/core/language_models/chat_models'; -import type { Embeddings } from '@langchain/core/embeddings'; -import formatChatHistoryAsString from '../utils/formatHistory'; -import eventEmitter from 'events'; -import computeSimilarity from '../utils/computeSimilarity'; -import logger from '../utils/logger'; -import { IterableReadableStream } from '@langchain/core/utils/stream'; - -const basicAcademicSearchRetrieverPrompt = ` -You will be given a conversation below and a follow up question. You need to rephrase the follow-up question if needed so it is a standalone question that can be used by the LLM to search the web for information. -If it is a writing task or a simple hi, hello rather than a question, you need to return \`not_needed\` as the response. - -Example: -1. Follow up question: How does stable diffusion work? -Rephrased: Stable diffusion working - -2. Follow up question: What is linear algebra? -Rephrased: Linear algebra - -3. Follow up question: What is the third law of thermodynamics? -Rephrased: Third law of thermodynamics - -Conversation: -{chat_history} - -Follow up question: {query} -Rephrased question: -`; - -const basicAcademicSearchResponsePrompt = ` - You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are set on focus mode 'Academic', this means you will be searching for academic papers and articles on the web. - - Generate a response that is informative and relevant to the user's query based on provided context (the context consits of search results containing a brief description of the content of that page). - You must use this context to answer the user's query in the best way possible. Use an unbaised and journalistic tone in your response. Do not repeat the text. - You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them. - Your responses should be medium to long in length be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative. - You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. - Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. - However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. - - Anything inside the following \`context\` HTML block provided below is for your knowledge returned by the search engine and is not shared by the user. You have to answer question on the basis of it and cite the relevant information from it but you do not have to - talk about the context in your response. - - <context> - {context} - </context> - - If you think there's nothing relevant in the search results, you can say that 'Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?'. - Anything between the \`context\` is retrieved from a search engine and is not a part of the conversation with the user. Today's date is ${new Date().toISOString()} -`; - -const strParser = new StringOutputParser(); - -const handleStream = async ( - stream: IterableReadableStream<StreamEvent>, - emitter: eventEmitter, -) => { - for await (const event of stream) { - if ( - event.event === 'on_chain_end' && - event.name === 'FinalSourceRetriever' - ) { - emitter.emit( - 'data', - JSON.stringify({ type: 'sources', data: event.data.output }), - ); - } - if ( - event.event === 'on_chain_stream' && - event.name === 'FinalResponseGenerator' - ) { - emitter.emit( - 'data', - JSON.stringify({ type: 'response', data: event.data.chunk }), - ); - } - if ( - event.event === 'on_chain_end' && - event.name === 'FinalResponseGenerator' - ) { - emitter.emit('end'); - } - } -}; - -type BasicChainInput = { - chat_history: BaseMessage[]; - query: string; -}; - -const createBasicAcademicSearchRetrieverChain = (llm: BaseChatModel) => { - return RunnableSequence.from([ - PromptTemplate.fromTemplate(basicAcademicSearchRetrieverPrompt), - llm, - strParser, - RunnableLambda.from(async (input: string) => { - if (input === 'not_needed') { - return { query: '', docs: [] }; - } - - const res = await searchSearxng(input, { - language: 'en', - engines: ['arxiv', 'google scholar', 'pubmed'], - }); - - const documents = res.results.map( - (result) => - new Document({ - pageContent: result.content, - metadata: { - title: result.title, - url: result.url, - ...(result.img_src && { img_src: result.img_src }), - }, - }), - ); - - return { query: input, docs: documents }; - }), - ]); -}; - -const createBasicAcademicSearchAnsweringChain = ( - llm: BaseChatModel, - embeddings: Embeddings, - optimizationMode: 'speed' | 'balanced' | 'quality', -) => { - const basicAcademicSearchRetrieverChain = - createBasicAcademicSearchRetrieverChain(llm); - - const processDocs = async (docs: Document[]) => { - return docs - .map((_, index) => `${index + 1}. ${docs[index].pageContent}`) - .join('\n'); - }; - - const rerankDocs = async ({ - query, - docs, - }: { - query: string; - docs: Document[]; - }) => { - if (docs.length === 0) { - return docs; - } - - const docsWithContent = docs.filter( - (doc) => doc.pageContent && doc.pageContent.length > 0, - ); - - if (optimizationMode === 'speed') { - return docsWithContent.slice(0, 15); - } else if (optimizationMode === 'balanced') { - const [docEmbeddings, queryEmbedding] = await Promise.all([ - embeddings.embedDocuments( - docsWithContent.map((doc) => doc.pageContent), - ), - embeddings.embedQuery(query), - ]); - - const similarity = docEmbeddings.map((docEmbedding, i) => { - const sim = computeSimilarity(queryEmbedding, docEmbedding); - - return { - index: i, - similarity: sim, - }; - }); - - const sortedDocs = similarity - .sort((a, b) => b.similarity - a.similarity) - .slice(0, 15) - .map((sim) => docsWithContent[sim.index]); - - return sortedDocs; - } - }; - - return RunnableSequence.from([ - RunnableMap.from({ - query: (input: BasicChainInput) => input.query, - chat_history: (input: BasicChainInput) => input.chat_history, - context: RunnableSequence.from([ - (input) => ({ - query: input.query, - chat_history: formatChatHistoryAsString(input.chat_history), - }), - basicAcademicSearchRetrieverChain - .pipe(rerankDocs) - .withConfig({ - runName: 'FinalSourceRetriever', - }) - .pipe(processDocs), - ]), - }), - ChatPromptTemplate.fromMessages([ - ['system', basicAcademicSearchResponsePrompt], - new MessagesPlaceholder('chat_history'), - ['user', '{query}'], - ]), - llm, - strParser, - ]).withConfig({ - runName: 'FinalResponseGenerator', - }); -}; - -const basicAcademicSearch = ( - query: string, - history: BaseMessage[], - llm: BaseChatModel, - embeddings: Embeddings, - optimizationMode: 'speed' | 'balanced' | 'quality', -) => { - const emitter = new eventEmitter(); - - try { - const basicAcademicSearchAnsweringChain = - createBasicAcademicSearchAnsweringChain( - llm, - embeddings, - optimizationMode, - ); - - const stream = basicAcademicSearchAnsweringChain.streamEvents( - { - chat_history: history, - query: query, - }, - { - version: 'v1', - }, - ); - - handleStream(stream, emitter); - } catch (err) { - emitter.emit( - 'error', - JSON.stringify({ data: 'An error has occurred please try again later' }), - ); - logger.error(`Error in academic search: ${err}`); - } - - return emitter; -}; - -const handleAcademicSearch = ( - message: string, - history: BaseMessage[], - llm: BaseChatModel, - embeddings: Embeddings, - optimizationMode: 'speed' | 'balanced' | 'quality', -) => { - const emitter = basicAcademicSearch( - message, - history, - llm, - embeddings, - optimizationMode, - ); - return emitter; -}; - -export default handleAcademicSearch; diff --git a/src/agents/redditSearchAgent.ts b/src/agents/redditSearchAgent.ts deleted file mode 100644 index 2c44c13..0000000 --- a/src/agents/redditSearchAgent.ts +++ /dev/null @@ -1,276 +0,0 @@ -import { BaseMessage } from '@langchain/core/messages'; -import { - PromptTemplate, - ChatPromptTemplate, - MessagesPlaceholder, -} from '@langchain/core/prompts'; -import { - RunnableSequence, - RunnableMap, - RunnableLambda, -} from '@langchain/core/runnables'; -import { StringOutputParser } from '@langchain/core/output_parsers'; -import { Document } from '@langchain/core/documents'; -import { searchSearxng } from '../lib/searxng'; -import type { StreamEvent } from '@langchain/core/tracers/log_stream'; -import type { BaseChatModel } from '@langchain/core/language_models/chat_models'; -import type { Embeddings } from '@langchain/core/embeddings'; -import formatChatHistoryAsString from '../utils/formatHistory'; -import eventEmitter from 'events'; -import computeSimilarity from '../utils/computeSimilarity'; -import logger from '../utils/logger'; -import { IterableReadableStream } from '@langchain/core/utils/stream'; - -const basicRedditSearchRetrieverPrompt = ` -You will be given a conversation below and a follow up question. You need to rephrase the follow-up question if needed so it is a standalone question that can be used by the LLM to search the web for information. -If it is a writing task or a simple hi, hello rather than a question, you need to return \`not_needed\` as the response. - -Example: -1. Follow up question: Which company is most likely to create an AGI -Rephrased: Which company is most likely to create an AGI - -2. Follow up question: Is Earth flat? -Rephrased: Is Earth flat? - -3. Follow up question: Is there life on Mars? -Rephrased: Is there life on Mars? - -Conversation: -{chat_history} - -Follow up question: {query} -Rephrased question: -`; - -const basicRedditSearchResponsePrompt = ` - You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are set on focus mode 'Reddit', this means you will be searching for information, opinions and discussions on the web using Reddit. - - Generate a response that is informative and relevant to the user's query based on provided context (the context consits of search results containing a brief description of the content of that page). - You must use this context to answer the user's query in the best way possible. Use an unbaised and journalistic tone in your response. Do not repeat the text. - You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them. - Your responses should be medium to long in length be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative. - You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. - Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. - However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. - - Anything inside the following \`context\` HTML block provided below is for your knowledge returned by Reddit and is not shared by the user. You have to answer question on the basis of it and cite the relevant information from it but you do not have to - talk about the context in your response. - - <context> - {context} - </context> - - If you think there's nothing relevant in the search results, you can say that 'Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?'. - Anything between the \`context\` is retrieved from Reddit and is not a part of the conversation with the user. Today's date is ${new Date().toISOString()} -`; - -const strParser = new StringOutputParser(); - -const handleStream = async ( - stream: IterableReadableStream<StreamEvent>, - emitter: eventEmitter, -) => { - for await (const event of stream) { - if ( - event.event === 'on_chain_end' && - event.name === 'FinalSourceRetriever' - ) { - emitter.emit( - 'data', - JSON.stringify({ type: 'sources', data: event.data.output }), - ); - } - if ( - event.event === 'on_chain_stream' && - event.name === 'FinalResponseGenerator' - ) { - emitter.emit( - 'data', - JSON.stringify({ type: 'response', data: event.data.chunk }), - ); - } - if ( - event.event === 'on_chain_end' && - event.name === 'FinalResponseGenerator' - ) { - emitter.emit('end'); - } - } -}; - -type BasicChainInput = { - chat_history: BaseMessage[]; - query: string; -}; - -const createBasicRedditSearchRetrieverChain = (llm: BaseChatModel) => { - return RunnableSequence.from([ - PromptTemplate.fromTemplate(basicRedditSearchRetrieverPrompt), - llm, - strParser, - RunnableLambda.from(async (input: string) => { - if (input === 'not_needed') { - return { query: '', docs: [] }; - } - - const res = await searchSearxng(input, { - language: 'en', - engines: ['reddit'], - }); - - const documents = res.results.map( - (result) => - new Document({ - pageContent: result.content ? result.content : result.title, - metadata: { - title: result.title, - url: result.url, - ...(result.img_src && { img_src: result.img_src }), - }, - }), - ); - - return { query: input, docs: documents }; - }), - ]); -}; - -const createBasicRedditSearchAnsweringChain = ( - llm: BaseChatModel, - embeddings: Embeddings, - optimizationMode: 'speed' | 'balanced' | 'quality', -) => { - const basicRedditSearchRetrieverChain = - createBasicRedditSearchRetrieverChain(llm); - - const processDocs = async (docs: Document[]) => { - return docs - .map((_, index) => `${index + 1}. ${docs[index].pageContent}`) - .join('\n'); - }; - - const rerankDocs = async ({ - query, - docs, - }: { - query: string; - docs: Document[]; - }) => { - if (docs.length === 0) { - return docs; - } - - const docsWithContent = docs.filter( - (doc) => doc.pageContent && doc.pageContent.length > 0, - ); - - if (optimizationMode === 'speed') { - return docsWithContent.slice(0, 15); - } else if (optimizationMode === 'balanced') { - const [docEmbeddings, queryEmbedding] = await Promise.all([ - embeddings.embedDocuments( - docsWithContent.map((doc) => doc.pageContent), - ), - embeddings.embedQuery(query), - ]); - - const similarity = docEmbeddings.map((docEmbedding, i) => { - const sim = computeSimilarity(queryEmbedding, docEmbedding); - - return { - index: i, - similarity: sim, - }; - }); - - const sortedDocs = similarity - .filter((sim) => sim.similarity > 0.3) - .sort((a, b) => b.similarity - a.similarity) - .slice(0, 15) - .map((sim) => docsWithContent[sim.index]); - - return sortedDocs; - } - }; - - return RunnableSequence.from([ - RunnableMap.from({ - query: (input: BasicChainInput) => input.query, - chat_history: (input: BasicChainInput) => input.chat_history, - context: RunnableSequence.from([ - (input) => ({ - query: input.query, - chat_history: formatChatHistoryAsString(input.chat_history), - }), - basicRedditSearchRetrieverChain - .pipe(rerankDocs) - .withConfig({ - runName: 'FinalSourceRetriever', - }) - .pipe(processDocs), - ]), - }), - ChatPromptTemplate.fromMessages([ - ['system', basicRedditSearchResponsePrompt], - new MessagesPlaceholder('chat_history'), - ['user', '{query}'], - ]), - llm, - strParser, - ]).withConfig({ - runName: 'FinalResponseGenerator', - }); -}; - -const basicRedditSearch = ( - query: string, - history: BaseMessage[], - llm: BaseChatModel, - embeddings: Embeddings, - optimizationMode: 'speed' | 'balanced' | 'quality', -) => { - const emitter = new eventEmitter(); - - try { - const basicRedditSearchAnsweringChain = - createBasicRedditSearchAnsweringChain(llm, embeddings, optimizationMode); - const stream = basicRedditSearchAnsweringChain.streamEvents( - { - chat_history: history, - query: query, - }, - { - version: 'v1', - }, - ); - - handleStream(stream, emitter); - } catch (err) { - emitter.emit( - 'error', - JSON.stringify({ data: 'An error has occurred please try again later' }), - ); - logger.error(`Error in RedditSearch: ${err}`); - } - - return emitter; -}; - -const handleRedditSearch = ( - message: string, - history: BaseMessage[], - llm: BaseChatModel, - embeddings: Embeddings, - optimizationMode: 'speed' | 'balanced' | 'quality', -) => { - const emitter = basicRedditSearch( - message, - history, - llm, - embeddings, - optimizationMode, - ); - return emitter; -}; - -export default handleRedditSearch; diff --git a/src/agents/webSearchAgent.ts b/src/agents/webSearchAgent.ts deleted file mode 100644 index 4303762..0000000 --- a/src/agents/webSearchAgent.ts +++ /dev/null @@ -1,541 +0,0 @@ -import { BaseMessage } from '@langchain/core/messages'; -import { - PromptTemplate, - ChatPromptTemplate, - MessagesPlaceholder, -} from '@langchain/core/prompts'; -import { - RunnableSequence, - RunnableMap, - RunnableLambda, -} from '@langchain/core/runnables'; -import { StringOutputParser } from '@langchain/core/output_parsers'; -import { Document } from '@langchain/core/documents'; -import { searchSearxng } from '../lib/searxng'; -import type { StreamEvent } from '@langchain/core/tracers/log_stream'; -import type { BaseChatModel } from '@langchain/core/language_models/chat_models'; -import type { Embeddings } from '@langchain/core/embeddings'; -import formatChatHistoryAsString from '../utils/formatHistory'; -import eventEmitter from 'events'; -import computeSimilarity from '../utils/computeSimilarity'; -import logger from '../utils/logger'; -import LineListOutputParser from '../lib/outputParsers/listLineOutputParser'; -import LineOutputParser from '../lib/outputParsers/lineOutputParser'; -import { IterableReadableStream } from '@langchain/core/utils/stream'; -import { ChatOpenAI } from '@langchain/openai'; -import path from 'path'; -import fs from 'fs'; -import { getDocumentsFromLinks } from '../utils/documents'; - -const basicSearchRetrieverPrompt = ` -You are an AI question rephraser. You will be given a conversation and a follow-up question, you will have to rephrase the follow up question so it is a standalone question and can be used by another LLM to search the web for information to answer it. -If it is a smple writing task or a greeting (unless the greeting contains a question after it) like Hi, Hello, How are you, etc. than a question then you need to return \`not_needed\` as the response (This is because the LLM won't need to search the web for finding information on this topic). -If the user asks some question from some URL or wants you to summarize a PDF or a webpage (via URL) you need to return the links inside the \`links\` XML block and the question inside the \`question\` XML block. If the user wants to you to summarize the webpage or the PDF you need to return \`summarize\` inside the \`question\` XML block in place of a question and the link to summarize in the \`links\` XML block. -You must always return the rephrased question inside the \`question\` XML block, if there are no links in the follow-up question then don't insert a \`links\` XML block in your response. - -There are several examples attached for your reference inside the below \`examples\` XML block - -<examples> -1. Follow up question: What is the capital of France -Rephrased question:\` -<question> -Capital of france -</question> -\` - -2. Hi, how are you? -Rephrased question\` -<question> -not_needed -</question> -\` - -3. Follow up question: What is Docker? -Rephrased question: \` -<question> -What is Docker -</question> -\` - -4. Follow up question: Can you tell me what is X from https://example.com -Rephrased question: \` -<question> -Can you tell me what is X? -</question> - -<links> -https://example.com -</links> -\` - -5. Follow up question: Summarize the content from https://example.com -Rephrased question: \` -<question> -summarize -</question> - -<links> -https://example.com -</links> -\` -</examples> - -Anything below is the part of the actual conversation and you need to use conversation and the follow-up question to rephrase the follow-up question as a standalone question based on the guidelines shared above. - -<conversation> -{chat_history} -</conversation> - -Follow up question: {query} -Rephrased question: -`; - -const basicWebSearchResponsePrompt = ` - You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are also an expert at summarizing web pages or documents and searching for content in them. - - Generate a response that is informative and relevant to the user's query based on provided context (the context consits of search results containing a brief description of the content of that page). - You must use this context to answer the user's query in the best way possible. Use an unbaised and journalistic tone in your response. Do not repeat the text. - You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them. - If the query contains some links and the user asks to answer from those links you will be provided the entire content of the page inside the \`context\` XML block. You can then use this content to answer the user's query. - If the user asks to summarize content from some links, you will be provided the entire content of the page inside the \`context\` XML block. You can then use this content to summarize the text. The content provided inside the \`context\` block will be already summarized by another model so you just need to use that content to answer the user's query. - Your responses should be medium to long in length be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative. - You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. - Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. - However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. - - Anything inside the following \`context\` HTML block provided below is for your knowledge returned by the search engine and is not shared by the user. You have to answer question on the basis of it and cite the relevant information from it but you do not have to - talk about the context in your response. - - <context> - {context} - </context> - - If you think there's nothing relevant in the search results, you can say that 'Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?'. You do not need to do this for summarization tasks. - Anything between the \`context\` is retrieved from a search engine and is not a part of the conversation with the user. Today's date is ${new Date().toISOString()} -`; - -const strParser = new StringOutputParser(); - -const handleStream = async ( - stream: IterableReadableStream<StreamEvent>, - emitter: eventEmitter, -) => { - for await (const event of stream) { - if ( - event.event === 'on_chain_end' && - event.name === 'FinalSourceRetriever' - ) { - emitter.emit( - 'data', - JSON.stringify({ type: 'sources', data: event.data.output }), - ); - } - if ( - event.event === 'on_chain_stream' && - event.name === 'FinalResponseGenerator' - ) { - emitter.emit( - 'data', - JSON.stringify({ type: 'response', data: event.data.chunk }), - ); - } - if ( - event.event === 'on_chain_end' && - event.name === 'FinalResponseGenerator' - ) { - emitter.emit('end'); - } - } -}; - -type BasicChainInput = { - chat_history: BaseMessage[]; - query: string; -}; - -const createBasicWebSearchRetrieverChain = (llm: BaseChatModel) => { - (llm as unknown as ChatOpenAI).temperature = 0; - - return RunnableSequence.from([ - PromptTemplate.fromTemplate(basicSearchRetrieverPrompt), - llm, - strParser, - RunnableLambda.from(async (input: string) => { - const linksOutputParser = new LineListOutputParser({ - key: 'links', - }); - - const questionOutputParser = new LineOutputParser({ - key: 'question', - }); - - const links = await linksOutputParser.parse(input); - let question = await questionOutputParser.parse(input); - - if (question === 'not_needed') { - return { query: '', docs: [] }; - } - - if (links.length > 0) { - if (question.length === 0) { - question = 'summarize'; - } - - let docs = []; - - const linkDocs = await getDocumentsFromLinks({ links }); - - const docGroups: Document[] = []; - - linkDocs.map((doc) => { - const URLDocExists = docGroups.find( - (d) => - d.metadata.url === doc.metadata.url && d.metadata.totalDocs < 10, - ); - - if (!URLDocExists) { - docGroups.push({ - ...doc, - metadata: { - ...doc.metadata, - totalDocs: 1, - }, - }); - } - - const docIndex = docGroups.findIndex( - (d) => - d.metadata.url === doc.metadata.url && d.metadata.totalDocs < 10, - ); - - if (docIndex !== -1) { - docGroups[docIndex].pageContent = - docGroups[docIndex].pageContent + `\n\n` + doc.pageContent; - docGroups[docIndex].metadata.totalDocs += 1; - } - }); - - await Promise.all( - docGroups.map(async (doc) => { - const res = await llm.invoke(` - You are a web search summarizer, tasked with summarizing a piece of text retrieved from a web search. Your job is to summarize the - text into a detailed, 2-4 paragraph explanation that captures the main ideas and provides a comprehensive answer to the query. - If the query is \"summarize\", you should provide a detailed summary of the text. If the query is a specific question, you should answer it in the summary. - - - **Journalistic tone**: The summary should sound professional and journalistic, not too casual or vague. - - **Thorough and detailed**: Ensure that every key point from the text is captured and that the summary directly answers the query. - - **Not too lengthy, but detailed**: The summary should be informative but not excessively long. Focus on providing detailed information in a concise format. - - The text will be shared inside the \`text\` XML tag, and the query inside the \`query\` XML tag. - - <example> - 1. \`<text> - Docker is a set of platform-as-a-service products that use OS-level virtualization to deliver software in packages called containers. - It was first released in 2013 and is developed by Docker, Inc. Docker is designed to make it easier to create, deploy, and run applications - by using containers. - </text> - - <query> - What is Docker and how does it work? - </query> - - Response: - Docker is a revolutionary platform-as-a-service product developed by Docker, Inc., that uses container technology to make application - deployment more efficient. It allows developers to package their software with all necessary dependencies, making it easier to run in - any environment. Released in 2013, Docker has transformed the way applications are built, deployed, and managed. - \` - 2. \`<text> - The theory of relativity, or simply relativity, encompasses two interrelated theories of Albert Einstein: special relativity and general - relativity. However, the word "relativity" is sometimes used in reference to Galilean invariance. The term "theory of relativity" was based - on the expression "relative theory" used by Max Planck in 1906. The theory of relativity usually encompasses two interrelated theories by - Albert Einstein: special relativity and general relativity. Special relativity applies to all physical phenomena in the absence of gravity. - General relativity explains the law of gravitation and its relation to other forces of nature. It applies to the cosmological and astrophysical - realm, including astronomy. - </text> - - <query> - summarize - </query> - - Response: - The theory of relativity, developed by Albert Einstein, encompasses two main theories: special relativity and general relativity. Special - relativity applies to all physical phenomena in the absence of gravity, while general relativity explains the law of gravitation and its - relation to other forces of nature. The theory of relativity is based on the concept of "relative theory," as introduced by Max Planck in - 1906. It is a fundamental theory in physics that has revolutionized our understanding of the universe. - \` - </example> - - Everything below is the actual data you will be working with. Good luck! - - <query> - ${question} - </query> - - <text> - ${doc.pageContent} - </text> - - Make sure to answer the query in the summary. - `); - - const document = new Document({ - pageContent: res.content as string, - metadata: { - title: doc.metadata.title, - url: doc.metadata.url, - }, - }); - - docs.push(document); - }), - ); - - return { query: question, docs: docs }; - } else { - const res = await searchSearxng(question, { - language: 'en', - }); - - const documents = res.results.map( - (result) => - new Document({ - pageContent: result.content, - metadata: { - title: result.title, - url: result.url, - ...(result.img_src && { img_src: result.img_src }), - }, - }), - ); - - return { query: question, docs: documents }; - } - }), - ]); -}; - -const createBasicWebSearchAnsweringChain = ( - llm: BaseChatModel, - embeddings: Embeddings, - optimizationMode: 'speed' | 'balanced' | 'quality', - fileIds: string[], -) => { - const basicWebSearchRetrieverChain = createBasicWebSearchRetrieverChain(llm); - - const processDocs = async (docs: Document[]) => { - return docs - .map((_, index) => `${index + 1}. ${docs[index].pageContent}`) - .join('\n'); - }; - - const rerankDocs = async ({ - query, - docs, - }: { - query: string; - docs: Document[]; - }) => { - if (docs.length === 0) { - return docs; - } - - const filesData = fileIds - .map((file) => { - const filePath = path.join(process.cwd(), 'uploads', file); - - const contentPath = filePath + '-extracted.json'; - const embeddingsPath = filePath + '-embeddings.json'; - - const content = JSON.parse(fs.readFileSync(contentPath, 'utf8')); - const embeddings = JSON.parse(fs.readFileSync(embeddingsPath, 'utf8')); - - const fileSimilaritySearchObject = content.contents.map( - (c: string, i) => { - return { - fileName: content.title, - content: c, - embeddings: embeddings.embeddings[i], - }; - }, - ); - - return fileSimilaritySearchObject; - }) - .flat(); - - if (query.toLocaleLowerCase() === 'summarize') { - return docs.slice(0, 15); - } - - const docsWithContent = docs.filter( - (doc) => doc.pageContent && doc.pageContent.length > 0, - ); - - if (optimizationMode === 'speed') { - if (filesData.length > 0) { - const [queryEmbedding] = await Promise.all([ - embeddings.embedQuery(query), - ]); - - const fileDocs = filesData.map((fileData) => { - return new Document({ - pageContent: fileData.content, - metadata: { - title: fileData.fileName, - url: `File`, - }, - }); - }); - - const similarity = filesData.map((fileData, i) => { - const sim = computeSimilarity(queryEmbedding, fileData.embeddings); - - return { - index: i, - similarity: sim, - }; - }); - - const sortedDocs = similarity - .filter((sim) => sim.similarity > 0.3) - .sort((a, b) => b.similarity - a.similarity) - .slice(0, 8) - .map((sim) => fileDocs[sim.index]); - - return [ - ...sortedDocs, - ...docsWithContent.slice(0, 15 - sortedDocs.length), - ]; - } else { - return docsWithContent.slice(0, 15); - } - } else if (optimizationMode === 'balanced') { - const [docEmbeddings, queryEmbedding] = await Promise.all([ - embeddings.embedDocuments( - docsWithContent.map((doc) => doc.pageContent), - ), - embeddings.embedQuery(query), - ]); - - docsWithContent.push( - ...filesData.map((fileData) => { - return new Document({ - pageContent: fileData.content, - metadata: { - title: fileData.fileName, - url: `File`, - }, - }); - }), - ); - - docEmbeddings.push(...filesData.map((fileData) => fileData.embeddings)); - - const similarity = docEmbeddings.map((docEmbedding, i) => { - const sim = computeSimilarity(queryEmbedding, docEmbedding); - - return { - index: i, - similarity: sim, - }; - }); - - const sortedDocs = similarity - .filter((sim) => sim.similarity > 0.3) - .sort((a, b) => b.similarity - a.similarity) - .slice(0, 15) - .map((sim) => docsWithContent[sim.index]); - - return sortedDocs; - } - }; - - return RunnableSequence.from([ - RunnableMap.from({ - query: (input: BasicChainInput) => input.query, - chat_history: (input: BasicChainInput) => input.chat_history, - context: RunnableSequence.from([ - (input) => ({ - query: input.query, - chat_history: formatChatHistoryAsString(input.chat_history), - }), - basicWebSearchRetrieverChain - .pipe(rerankDocs) - .withConfig({ - runName: 'FinalSourceRetriever', - }) - .pipe(processDocs), - ]), - }), - ChatPromptTemplate.fromMessages([ - ['system', basicWebSearchResponsePrompt], - new MessagesPlaceholder('chat_history'), - ['user', '{query}'], - ]), - llm, - strParser, - ]).withConfig({ - runName: 'FinalResponseGenerator', - }); -}; - -const basicWebSearch = ( - query: string, - history: BaseMessage[], - llm: BaseChatModel, - embeddings: Embeddings, - optimizationMode: 'speed' | 'balanced' | 'quality', - fileIds: string[], -) => { - const emitter = new eventEmitter(); - - try { - const basicWebSearchAnsweringChain = createBasicWebSearchAnsweringChain( - llm, - embeddings, - optimizationMode, - fileIds, - ); - - const stream = basicWebSearchAnsweringChain.streamEvents( - { - chat_history: history, - query: query, - }, - { - version: 'v1', - }, - ); - - handleStream(stream, emitter); - } catch (err) { - emitter.emit( - 'error', - JSON.stringify({ data: 'An error has occurred please try again later' }), - ); - logger.error(`Error in websearch: ${err}`); - } - - return emitter; -}; - -const handleWebSearch = ( - message: string, - history: BaseMessage[], - llm: BaseChatModel, - embeddings: Embeddings, - optimizationMode: 'speed' | 'balanced' | 'quality', - fileIds: string[], -) => { - const emitter = basicWebSearch( - message, - history, - llm, - embeddings, - optimizationMode, - fileIds, - ); - return emitter; -}; - -export default handleWebSearch; diff --git a/src/agents/wolframAlphaSearchAgent.ts b/src/agents/wolframAlphaSearchAgent.ts deleted file mode 100644 index 1de8d0f..0000000 --- a/src/agents/wolframAlphaSearchAgent.ts +++ /dev/null @@ -1,220 +0,0 @@ -import { BaseMessage } from '@langchain/core/messages'; -import { - PromptTemplate, - ChatPromptTemplate, - MessagesPlaceholder, -} from '@langchain/core/prompts'; -import { - RunnableSequence, - RunnableMap, - RunnableLambda, -} from '@langchain/core/runnables'; -import { StringOutputParser } from '@langchain/core/output_parsers'; -import { Document } from '@langchain/core/documents'; -import { searchSearxng } from '../lib/searxng'; -import type { StreamEvent } from '@langchain/core/tracers/log_stream'; -import type { BaseChatModel } from '@langchain/core/language_models/chat_models'; -import type { Embeddings } from '@langchain/core/embeddings'; -import formatChatHistoryAsString from '../utils/formatHistory'; -import eventEmitter from 'events'; -import logger from '../utils/logger'; -import { IterableReadableStream } from '@langchain/core/utils/stream'; - -const basicWolframAlphaSearchRetrieverPrompt = ` -You will be given a conversation below and a follow up question. You need to rephrase the follow-up question if needed so it is a standalone question that can be used by the LLM to search the web for information. -If it is a writing task or a simple hi, hello rather than a question, you need to return \`not_needed\` as the response. - -Example: -1. Follow up question: What is the atomic radius of S? -Rephrased: Atomic radius of S - -2. Follow up question: What is linear algebra? -Rephrased: Linear algebra - -3. Follow up question: What is the third law of thermodynamics? -Rephrased: Third law of thermodynamics - -Conversation: -{chat_history} - -Follow up question: {query} -Rephrased question: -`; - -const basicWolframAlphaSearchResponsePrompt = ` - You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are set on focus mode 'Wolfram Alpha', this means you will be searching for information on the web using Wolfram Alpha. It is a computational knowledge engine that can answer factual queries and perform computations. - - Generate a response that is informative and relevant to the user's query based on provided context (the context consits of search results containing a brief description of the content of that page). - You must use this context to answer the user's query in the best way possible. Use an unbaised and journalistic tone in your response. Do not repeat the text. - You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them. - Your responses should be medium to long in length be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative. - You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. - Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. - However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. - - Anything inside the following \`context\` HTML block provided below is for your knowledge returned by Wolfram Alpha and is not shared by the user. You have to answer question on the basis of it and cite the relevant information from it but you do not have to - talk about the context in your response. - - <context> - {context} - </context> - - If you think there's nothing relevant in the search results, you can say that 'Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?'. - Anything between the \`context\` is retrieved from Wolfram Alpha and is not a part of the conversation with the user. Today's date is ${new Date().toISOString()} -`; - -const strParser = new StringOutputParser(); - -const handleStream = async ( - stream: IterableReadableStream<StreamEvent>, - emitter: eventEmitter, -) => { - for await (const event of stream) { - if ( - event.event === 'on_chain_end' && - event.name === 'FinalSourceRetriever' - ) { - emitter.emit( - 'data', - JSON.stringify({ type: 'sources', data: event.data.output }), - ); - } - if ( - event.event === 'on_chain_stream' && - event.name === 'FinalResponseGenerator' - ) { - emitter.emit( - 'data', - JSON.stringify({ type: 'response', data: event.data.chunk }), - ); - } - if ( - event.event === 'on_chain_end' && - event.name === 'FinalResponseGenerator' - ) { - emitter.emit('end'); - } - } -}; - -type BasicChainInput = { - chat_history: BaseMessage[]; - query: string; -}; - -const createBasicWolframAlphaSearchRetrieverChain = (llm: BaseChatModel) => { - return RunnableSequence.from([ - PromptTemplate.fromTemplate(basicWolframAlphaSearchRetrieverPrompt), - llm, - strParser, - RunnableLambda.from(async (input: string) => { - if (input === 'not_needed') { - return { query: '', docs: [] }; - } - - const res = await searchSearxng(input, { - language: 'en', - engines: ['wolframalpha'], - }); - - const documents = res.results.map( - (result) => - new Document({ - pageContent: result.content, - metadata: { - title: result.title, - url: result.url, - ...(result.img_src && { img_src: result.img_src }), - }, - }), - ); - - return { query: input, docs: documents }; - }), - ]); -}; - -const createBasicWolframAlphaSearchAnsweringChain = (llm: BaseChatModel) => { - const basicWolframAlphaSearchRetrieverChain = - createBasicWolframAlphaSearchRetrieverChain(llm); - - const processDocs = (docs: Document[]) => { - return docs - .map((_, index) => `${index + 1}. ${docs[index].pageContent}`) - .join('\n'); - }; - - return RunnableSequence.from([ - RunnableMap.from({ - query: (input: BasicChainInput) => input.query, - chat_history: (input: BasicChainInput) => input.chat_history, - context: RunnableSequence.from([ - (input) => ({ - query: input.query, - chat_history: formatChatHistoryAsString(input.chat_history), - }), - basicWolframAlphaSearchRetrieverChain - .pipe(({ query, docs }) => { - return docs; - }) - .withConfig({ - runName: 'FinalSourceRetriever', - }) - .pipe(processDocs), - ]), - }), - ChatPromptTemplate.fromMessages([ - ['system', basicWolframAlphaSearchResponsePrompt], - new MessagesPlaceholder('chat_history'), - ['user', '{query}'], - ]), - llm, - strParser, - ]).withConfig({ - runName: 'FinalResponseGenerator', - }); -}; - -const basicWolframAlphaSearch = ( - query: string, - history: BaseMessage[], - llm: BaseChatModel, -) => { - const emitter = new eventEmitter(); - - try { - const basicWolframAlphaSearchAnsweringChain = - createBasicWolframAlphaSearchAnsweringChain(llm); - const stream = basicWolframAlphaSearchAnsweringChain.streamEvents( - { - chat_history: history, - query: query, - }, - { - version: 'v1', - }, - ); - - handleStream(stream, emitter); - } catch (err) { - emitter.emit( - 'error', - JSON.stringify({ data: 'An error has occurred please try again later' }), - ); - logger.error(`Error in WolframAlphaSearch: ${err}`); - } - - return emitter; -}; - -const handleWolframAlphaSearch = ( - message: string, - history: BaseMessage[], - llm: BaseChatModel, - embeddings: Embeddings, -) => { - const emitter = basicWolframAlphaSearch(message, history, llm); - return emitter; -}; - -export default handleWolframAlphaSearch; diff --git a/src/agents/writingAssistant.ts b/src/agents/writingAssistant.ts deleted file mode 100644 index 7e275df..0000000 --- a/src/agents/writingAssistant.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { BaseMessage } from '@langchain/core/messages'; -import { - ChatPromptTemplate, - MessagesPlaceholder, -} from '@langchain/core/prompts'; -import { RunnableSequence } from '@langchain/core/runnables'; -import { StringOutputParser } from '@langchain/core/output_parsers'; -import type { StreamEvent } from '@langchain/core/tracers/log_stream'; -import eventEmitter from 'events'; -import type { BaseChatModel } from '@langchain/core/language_models/chat_models'; -import type { Embeddings } from '@langchain/core/embeddings'; -import logger from '../utils/logger'; -import { IterableReadableStream } from '@langchain/core/utils/stream'; - -const writingAssistantPrompt = ` -You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are currently set on focus mode 'Writing Assistant', this means you will be helping the user write a response to a given query. -Since you are a writing assistant, you would not perform web searches. If you think you lack information to answer the query, you can ask the user for more information or suggest them to switch to a different focus mode. -`; - -const strParser = new StringOutputParser(); - -const handleStream = async ( - stream: IterableReadableStream<StreamEvent>, - emitter: eventEmitter, -) => { - for await (const event of stream) { - if ( - event.event === 'on_chain_stream' && - event.name === 'FinalResponseGenerator' - ) { - emitter.emit( - 'data', - JSON.stringify({ type: 'response', data: event.data.chunk }), - ); - } - if ( - event.event === 'on_chain_end' && - event.name === 'FinalResponseGenerator' - ) { - emitter.emit('end'); - } - } -}; - -const createWritingAssistantChain = (llm: BaseChatModel) => { - return RunnableSequence.from([ - ChatPromptTemplate.fromMessages([ - ['system', writingAssistantPrompt], - new MessagesPlaceholder('chat_history'), - ['user', '{query}'], - ]), - llm, - strParser, - ]).withConfig({ - runName: 'FinalResponseGenerator', - }); -}; - -const handleWritingAssistant = ( - query: string, - history: BaseMessage[], - llm: BaseChatModel, - embeddings: Embeddings, -) => { - const emitter = new eventEmitter(); - - try { - const writingAssistantChain = createWritingAssistantChain(llm); - const stream = writingAssistantChain.streamEvents( - { - chat_history: history, - query: query, - }, - { - version: 'v1', - }, - ); - - handleStream(stream, emitter); - } catch (err) { - emitter.emit( - 'error', - JSON.stringify({ data: 'An error has occurred please try again later' }), - ); - logger.error(`Error in writing assistant: ${err}`); - } - - return emitter; -}; - -export default handleWritingAssistant; diff --git a/src/agents/youtubeSearchAgent.ts b/src/agents/youtubeSearchAgent.ts deleted file mode 100644 index 2f53bc9..0000000 --- a/src/agents/youtubeSearchAgent.ts +++ /dev/null @@ -1,277 +0,0 @@ -import { BaseMessage } from '@langchain/core/messages'; -import { - PromptTemplate, - ChatPromptTemplate, - MessagesPlaceholder, -} from '@langchain/core/prompts'; -import { - RunnableSequence, - RunnableMap, - RunnableLambda, -} from '@langchain/core/runnables'; -import { StringOutputParser } from '@langchain/core/output_parsers'; -import { Document } from '@langchain/core/documents'; -import { searchSearxng } from '../lib/searxng'; -import type { StreamEvent } from '@langchain/core/tracers/log_stream'; -import type { BaseChatModel } from '@langchain/core/language_models/chat_models'; -import type { Embeddings } from '@langchain/core/embeddings'; -import formatChatHistoryAsString from '../utils/formatHistory'; -import eventEmitter from 'events'; -import computeSimilarity from '../utils/computeSimilarity'; -import logger from '../utils/logger'; -import { IterableReadableStream } from '@langchain/core/utils/stream'; - -const basicYoutubeSearchRetrieverPrompt = ` -You will be given a conversation below and a follow up question. You need to rephrase the follow-up question if needed so it is a standalone question that can be used by the LLM to search the web for information. -If it is a writing task or a simple hi, hello rather than a question, you need to return \`not_needed\` as the response. - -Example: -1. Follow up question: How does an A.C work? -Rephrased: A.C working - -2. Follow up question: Linear algebra explanation video -Rephrased: What is linear algebra? - -3. Follow up question: What is theory of relativity? -Rephrased: What is theory of relativity? - -Conversation: -{chat_history} - -Follow up question: {query} -Rephrased question: -`; - -const basicYoutubeSearchResponsePrompt = ` - You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are set on focus mode 'Youtube', this means you will be searching for videos on the web using Youtube and providing information based on the video's transcript. - - Generate a response that is informative and relevant to the user's query based on provided context (the context consits of search results containing a brief description of the content of that page). - You must use this context to answer the user's query in the best way possible. Use an unbaised and journalistic tone in your response. Do not repeat the text. - You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them. - Your responses should be medium to long in length be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative. - You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. - Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. - However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. - - Anything inside the following \`context\` HTML block provided below is for your knowledge returned by Youtube and is not shared by the user. You have to answer question on the basis of it and cite the relevant information from it but you do not have to - talk about the context in your response. - - <context> - {context} - </context> - - If you think there's nothing relevant in the search results, you can say that 'Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?'. - Anything between the \`context\` is retrieved from Youtube and is not a part of the conversation with the user. Today's date is ${new Date().toISOString()} -`; - -const strParser = new StringOutputParser(); - -const handleStream = async ( - stream: IterableReadableStream<StreamEvent>, - emitter: eventEmitter, -) => { - for await (const event of stream) { - if ( - event.event === 'on_chain_end' && - event.name === 'FinalSourceRetriever' - ) { - emitter.emit( - 'data', - JSON.stringify({ type: 'sources', data: event.data.output }), - ); - } - if ( - event.event === 'on_chain_stream' && - event.name === 'FinalResponseGenerator' - ) { - emitter.emit( - 'data', - JSON.stringify({ type: 'response', data: event.data.chunk }), - ); - } - if ( - event.event === 'on_chain_end' && - event.name === 'FinalResponseGenerator' - ) { - emitter.emit('end'); - } - } -}; - -type BasicChainInput = { - chat_history: BaseMessage[]; - query: string; -}; - -const createBasicYoutubeSearchRetrieverChain = (llm: BaseChatModel) => { - return RunnableSequence.from([ - PromptTemplate.fromTemplate(basicYoutubeSearchRetrieverPrompt), - llm, - strParser, - RunnableLambda.from(async (input: string) => { - if (input === 'not_needed') { - return { query: '', docs: [] }; - } - - const res = await searchSearxng(input, { - language: 'en', - engines: ['youtube'], - }); - - const documents = res.results.map( - (result) => - new Document({ - pageContent: result.content ? result.content : result.title, - metadata: { - title: result.title, - url: result.url, - ...(result.img_src && { img_src: result.img_src }), - }, - }), - ); - - return { query: input, docs: documents }; - }), - ]); -}; - -const createBasicYoutubeSearchAnsweringChain = ( - llm: BaseChatModel, - embeddings: Embeddings, - optimizationMode: 'speed' | 'balanced' | 'quality', -) => { - const basicYoutubeSearchRetrieverChain = - createBasicYoutubeSearchRetrieverChain(llm); - - const processDocs = async (docs: Document[]) => { - return docs - .map((_, index) => `${index + 1}. ${docs[index].pageContent}`) - .join('\n'); - }; - - const rerankDocs = async ({ - query, - docs, - }: { - query: string; - docs: Document[]; - }) => { - if (docs.length === 0) { - return docs; - } - - const docsWithContent = docs.filter( - (doc) => doc.pageContent && doc.pageContent.length > 0, - ); - - if (optimizationMode === 'speed') { - return docsWithContent.slice(0, 15); - } else { - const [docEmbeddings, queryEmbedding] = await Promise.all([ - embeddings.embedDocuments( - docsWithContent.map((doc) => doc.pageContent), - ), - embeddings.embedQuery(query), - ]); - - const similarity = docEmbeddings.map((docEmbedding, i) => { - const sim = computeSimilarity(queryEmbedding, docEmbedding); - - return { - index: i, - similarity: sim, - }; - }); - - const sortedDocs = similarity - .filter((sim) => sim.similarity > 0.3) - .sort((a, b) => b.similarity - a.similarity) - .slice(0, 15) - .map((sim) => docsWithContent[sim.index]); - - return sortedDocs; - } - }; - - return RunnableSequence.from([ - RunnableMap.from({ - query: (input: BasicChainInput) => input.query, - chat_history: (input: BasicChainInput) => input.chat_history, - context: RunnableSequence.from([ - (input) => ({ - query: input.query, - chat_history: formatChatHistoryAsString(input.chat_history), - }), - basicYoutubeSearchRetrieverChain - .pipe(rerankDocs) - .withConfig({ - runName: 'FinalSourceRetriever', - }) - .pipe(processDocs), - ]), - }), - ChatPromptTemplate.fromMessages([ - ['system', basicYoutubeSearchResponsePrompt], - new MessagesPlaceholder('chat_history'), - ['user', '{query}'], - ]), - llm, - strParser, - ]).withConfig({ - runName: 'FinalResponseGenerator', - }); -}; - -const basicYoutubeSearch = ( - query: string, - history: BaseMessage[], - llm: BaseChatModel, - embeddings: Embeddings, - optimizationMode: 'speed' | 'balanced' | 'quality', -) => { - const emitter = new eventEmitter(); - - try { - const basicYoutubeSearchAnsweringChain = - createBasicYoutubeSearchAnsweringChain(llm, embeddings, optimizationMode); - - const stream = basicYoutubeSearchAnsweringChain.streamEvents( - { - chat_history: history, - query: query, - }, - { - version: 'v1', - }, - ); - - handleStream(stream, emitter); - } catch (err) { - emitter.emit( - 'error', - JSON.stringify({ data: 'An error has occurred please try again later' }), - ); - logger.error(`Error in youtube search: ${err}`); - } - - return emitter; -}; - -const handleYoutubeSearch = ( - message: string, - history: BaseMessage[], - llm: BaseChatModel, - embeddings: Embeddings, - optimizationMode: 'speed' | 'balanced' | 'quality', -) => { - const emitter = basicYoutubeSearch( - message, - history, - llm, - embeddings, - optimizationMode, - ); - return emitter; -}; - -export default handleYoutubeSearch; diff --git a/src/agents/imageSearchAgent.ts b/src/chains/imageSearchAgent.ts similarity index 100% rename from src/agents/imageSearchAgent.ts rename to src/chains/imageSearchAgent.ts diff --git a/src/agents/suggestionGeneratorAgent.ts b/src/chains/suggestionGeneratorAgent.ts similarity index 100% rename from src/agents/suggestionGeneratorAgent.ts rename to src/chains/suggestionGeneratorAgent.ts diff --git a/src/agents/videoSearchAgent.ts b/src/chains/videoSearchAgent.ts similarity index 100% rename from src/agents/videoSearchAgent.ts rename to src/chains/videoSearchAgent.ts diff --git a/src/prompts/academicSearch.ts b/src/prompts/academicSearch.ts new file mode 100644 index 0000000..30495ee --- /dev/null +++ b/src/prompts/academicSearch.ts @@ -0,0 +1,42 @@ +export const academicSearchRetrieverPrompt = ` +You will be given a conversation below and a follow up question. You need to rephrase the follow-up question if needed so it is a standalone question that can be used by the LLM to search the web for information. +If it is a writing task or a simple hi, hello rather than a question, you need to return \`not_needed\` as the response. + +Example: +1. Follow up question: How does stable diffusion work? +Rephrased: Stable diffusion working + +2. Follow up question: What is linear algebra? +Rephrased: Linear algebra + +3. Follow up question: What is the third law of thermodynamics? +Rephrased: Third law of thermodynamics + +Conversation: +{chat_history} + +Follow up question: {query} +Rephrased question: +`; + +export const academicSearchResponsePrompt = ` + You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are set on focus mode 'Academic', this means you will be searching for academic papers and articles on the web. + + Generate a response that is informative and relevant to the user's query based on provided context (the context consits of search results containing a brief description of the content of that page). + You must use this context to answer the user's query in the best way possible. Use an unbaised and journalistic tone in your response. Do not repeat the text. + You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them. + Your responses should be medium to long in length be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative. + You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. + Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. + However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. + + Anything inside the following \`context\` HTML block provided below is for your knowledge returned by the search engine and is not shared by the user. You have to answer question on the basis of it and cite the relevant information from it but you do not have to + talk about the context in your response. + + <context> + {context} + </context> + + If you think there's nothing relevant in the search results, you can say that 'Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?'. + Anything between the \`context\` is retrieved from a search engine and is not a part of the conversation with the user. Today's date is ${new Date().toISOString()} +`; diff --git a/src/prompts/index.ts b/src/prompts/index.ts new file mode 100644 index 0000000..f479185 --- /dev/null +++ b/src/prompts/index.ts @@ -0,0 +1,32 @@ +import { + academicSearchResponsePrompt, + academicSearchRetrieverPrompt, +} from './academicSearch'; +import { + redditSearchResponsePrompt, + redditSearchRetrieverPrompt, +} from './redditSearch'; +import { webSearchResponsePrompt, webSearchRetrieverPrompt } from './webSearch'; +import { + wolframAlphaSearchResponsePrompt, + wolframAlphaSearchRetrieverPrompt, +} from './wolframAlpha'; +import { writingAssistantPrompt } from './writingAssistant'; +import { + youtubeSearchResponsePrompt, + youtubeSearchRetrieverPrompt, +} from './youtubeSearch'; + +export default { + webSearchResponsePrompt, + webSearchRetrieverPrompt, + academicSearchResponsePrompt, + academicSearchRetrieverPrompt, + redditSearchResponsePrompt, + redditSearchRetrieverPrompt, + wolframAlphaSearchResponsePrompt, + wolframAlphaSearchRetrieverPrompt, + writingAssistantPrompt, + youtubeSearchResponsePrompt, + youtubeSearchRetrieverPrompt, +}; diff --git a/src/prompts/redditSearch.ts b/src/prompts/redditSearch.ts new file mode 100644 index 0000000..1418eac --- /dev/null +++ b/src/prompts/redditSearch.ts @@ -0,0 +1,42 @@ +export const redditSearchRetrieverPrompt = ` +You will be given a conversation below and a follow up question. You need to rephrase the follow-up question if needed so it is a standalone question that can be used by the LLM to search the web for information. +If it is a writing task or a simple hi, hello rather than a question, you need to return \`not_needed\` as the response. + +Example: +1. Follow up question: Which company is most likely to create an AGI +Rephrased: Which company is most likely to create an AGI + +2. Follow up question: Is Earth flat? +Rephrased: Is Earth flat? + +3. Follow up question: Is there life on Mars? +Rephrased: Is there life on Mars? + +Conversation: +{chat_history} + +Follow up question: {query} +Rephrased question: +`; + +export const redditSearchResponsePrompt = ` + You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are set on focus mode 'Reddit', this means you will be searching for information, opinions and discussions on the web using Reddit. + + Generate a response that is informative and relevant to the user's query based on provided context (the context consits of search results containing a brief description of the content of that page). + You must use this context to answer the user's query in the best way possible. Use an unbaised and journalistic tone in your response. Do not repeat the text. + You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them. + Your responses should be medium to long in length be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative. + You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. + Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. + However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. + + Anything inside the following \`context\` HTML block provided below is for your knowledge returned by Reddit and is not shared by the user. You have to answer question on the basis of it and cite the relevant information from it but you do not have to + talk about the context in your response. + + <context> + {context} + </context> + + If you think there's nothing relevant in the search results, you can say that 'Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?'. + Anything between the \`context\` is retrieved from Reddit and is not a part of the conversation with the user. Today's date is ${new Date().toISOString()} +`; diff --git a/src/prompts/webSearch.ts b/src/prompts/webSearch.ts new file mode 100644 index 0000000..834bbfe --- /dev/null +++ b/src/prompts/webSearch.ts @@ -0,0 +1,86 @@ +export const webSearchRetrieverPrompt = ` +You are an AI question rephraser. You will be given a conversation and a follow-up question, you will have to rephrase the follow up question so it is a standalone question and can be used by another LLM to search the web for information to answer it. +If it is a smple writing task or a greeting (unless the greeting contains a question after it) like Hi, Hello, How are you, etc. than a question then you need to return \`not_needed\` as the response (This is because the LLM won't need to search the web for finding information on this topic). +If the user asks some question from some URL or wants you to summarize a PDF or a webpage (via URL) you need to return the links inside the \`links\` XML block and the question inside the \`question\` XML block. If the user wants to you to summarize the webpage or the PDF you need to return \`summarize\` inside the \`question\` XML block in place of a question and the link to summarize in the \`links\` XML block. +You must always return the rephrased question inside the \`question\` XML block, if there are no links in the follow-up question then don't insert a \`links\` XML block in your response. + +There are several examples attached for your reference inside the below \`examples\` XML block + +<examples> +1. Follow up question: What is the capital of France +Rephrased question:\` +<question> +Capital of france +</question> +\` + +2. Hi, how are you? +Rephrased question\` +<question> +not_needed +</question> +\` + +3. Follow up question: What is Docker? +Rephrased question: \` +<question> +What is Docker +</question> +\` + +4. Follow up question: Can you tell me what is X from https://example.com +Rephrased question: \` +<question> +Can you tell me what is X? +</question> + +<links> +https://example.com +</links> +\` + +5. Follow up question: Summarize the content from https://example.com +Rephrased question: \` +<question> +summarize +</question> + +<links> +https://example.com +</links> +\` +</examples> + +Anything below is the part of the actual conversation and you need to use conversation and the follow-up question to rephrase the follow-up question as a standalone question based on the guidelines shared above. + +<conversation> +{chat_history} +</conversation> + +Follow up question: {query} +Rephrased question: +`; + +export const webSearchResponsePrompt = ` + You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are also an expert at summarizing web pages or documents and searching for content in them. + + Generate a response that is informative and relevant to the user's query based on provided context (the context consits of search results containing a brief description of the content of that page). + You must use this context to answer the user's query in the best way possible. Use an unbaised and journalistic tone in your response. Do not repeat the text. + You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them. + If the query contains some links and the user asks to answer from those links you will be provided the entire content of the page inside the \`context\` XML block. You can then use this content to answer the user's query. + If the user asks to summarize content from some links, you will be provided the entire content of the page inside the \`context\` XML block. You can then use this content to summarize the text. The content provided inside the \`context\` block will be already summarized by another model so you just need to use that content to answer the user's query. + Your responses should be medium to long in length be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative. + You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. + Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. + However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. + + Anything inside the following \`context\` HTML block provided below is for your knowledge returned by the search engine and is not shared by the user. You have to answer question on the basis of it and cite the relevant information from it but you do not have to + talk about the context in your response. + + <context> + {context} + </context> + + If you think there's nothing relevant in the search results, you can say that 'Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?'. You do not need to do this for summarization tasks. + Anything between the \`context\` is retrieved from a search engine and is not a part of the conversation with the user. Today's date is ${new Date().toISOString()} +`; diff --git a/src/prompts/wolframAlpha.ts b/src/prompts/wolframAlpha.ts new file mode 100644 index 0000000..2e9c022 --- /dev/null +++ b/src/prompts/wolframAlpha.ts @@ -0,0 +1,42 @@ +export const wolframAlphaSearchRetrieverPrompt = ` +You will be given a conversation below and a follow up question. You need to rephrase the follow-up question if needed so it is a standalone question that can be used by the LLM to search the web for information. +If it is a writing task or a simple hi, hello rather than a question, you need to return \`not_needed\` as the response. + +Example: +1. Follow up question: What is the atomic radius of S? +Rephrased: Atomic radius of S + +2. Follow up question: What is linear algebra? +Rephrased: Linear algebra + +3. Follow up question: What is the third law of thermodynamics? +Rephrased: Third law of thermodynamics + +Conversation: +{chat_history} + +Follow up question: {query} +Rephrased question: +`; + +export const wolframAlphaSearchResponsePrompt = ` + You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are set on focus mode 'Wolfram Alpha', this means you will be searching for information on the web using Wolfram Alpha. It is a computational knowledge engine that can answer factual queries and perform computations. + + Generate a response that is informative and relevant to the user's query based on provided context (the context consits of search results containing a brief description of the content of that page). + You must use this context to answer the user's query in the best way possible. Use an unbaised and journalistic tone in your response. Do not repeat the text. + You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them. + Your responses should be medium to long in length be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative. + You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. + Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. + However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. + + Anything inside the following \`context\` HTML block provided below is for your knowledge returned by Wolfram Alpha and is not shared by the user. You have to answer question on the basis of it and cite the relevant information from it but you do not have to + talk about the context in your response. + + <context> + {context} + </context> + + If you think there's nothing relevant in the search results, you can say that 'Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?'. + Anything between the \`context\` is retrieved from Wolfram Alpha and is not a part of the conversation with the user. Today's date is ${new Date().toISOString()} +`; diff --git a/src/prompts/writingAssistant.ts b/src/prompts/writingAssistant.ts new file mode 100644 index 0000000..f56bf47 --- /dev/null +++ b/src/prompts/writingAssistant.ts @@ -0,0 +1,13 @@ +export const writingAssistantPrompt = ` +You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are currently set on focus mode 'Writing Assistant', this means you will be helping the user write a response to a given query. +Since you are a writing assistant, you would not perform web searches. If you think you lack information to answer the query, you can ask the user for more information or suggest them to switch to a different focus mode. +You will be shared a context that can contain information from files user has uploaded to get answers from. You will have to generate answers upon that. + +You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. +Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. +However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. + +<context> +{context} +</context> +`; diff --git a/src/prompts/youtubeSearch.ts b/src/prompts/youtubeSearch.ts new file mode 100644 index 0000000..5c729cb --- /dev/null +++ b/src/prompts/youtubeSearch.ts @@ -0,0 +1,42 @@ +export const youtubeSearchRetrieverPrompt = ` +You will be given a conversation below and a follow up question. You need to rephrase the follow-up question if needed so it is a standalone question that can be used by the LLM to search the web for information. +If it is a writing task or a simple hi, hello rather than a question, you need to return \`not_needed\` as the response. + +Example: +1. Follow up question: How does an A.C work? +Rephrased: A.C working + +2. Follow up question: Linear algebra explanation video +Rephrased: What is linear algebra? + +3. Follow up question: What is theory of relativity? +Rephrased: What is theory of relativity? + +Conversation: +{chat_history} + +Follow up question: {query} +Rephrased question: +`; + +export const youtubeSearchResponsePrompt = ` + You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are set on focus mode 'Youtube', this means you will be searching for videos on the web using Youtube and providing information based on the video's transcript. + + Generate a response that is informative and relevant to the user's query based on provided context (the context consits of search results containing a brief description of the content of that page). + You must use this context to answer the user's query in the best way possible. Use an unbaised and journalistic tone in your response. Do not repeat the text. + You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them. + Your responses should be medium to long in length be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative. + You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. + Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. + However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. + + Anything inside the following \`context\` HTML block provided below is for your knowledge returned by Youtube and is not shared by the user. You have to answer question on the basis of it and cite the relevant information from it but you do not have to + talk about the context in your response. + + <context> + {context} + </context> + + If you think there's nothing relevant in the search results, you can say that 'Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?'. + Anything between the \`context\` is retrieved from Youtube and is not a part of the conversation with the user. Today's date is ${new Date().toISOString()} +`; diff --git a/src/routes/images.ts b/src/routes/images.ts index c54dc40..efa095a 100644 --- a/src/routes/images.ts +++ b/src/routes/images.ts @@ -1,5 +1,5 @@ import express from 'express'; -import handleImageSearch from '../agents/imageSearchAgent'; +import handleImageSearch from '../chains/imageSearchAgent'; import { BaseChatModel } from '@langchain/core/language_models/chat_models'; import { getAvailableChatModelProviders } from '../lib/providers'; import { HumanMessage, AIMessage } from '@langchain/core/messages'; diff --git a/src/routes/search.ts b/src/routes/search.ts index 70fe228..e24b3f9 100644 --- a/src/routes/search.ts +++ b/src/routes/search.ts @@ -1,7 +1,7 @@ import express from 'express'; import logger from '../utils/logger'; -import { BaseChatModel } from 'langchain/chat_models/base'; -import { Embeddings } from 'langchain/embeddings/base'; +import type { BaseChatModel } from '@langchain/core/language_models/chat_models'; +import type { Embeddings } from '@langchain/core/embeddings'; import { ChatOpenAI } from '@langchain/openai'; import { getAvailableChatModelProviders, @@ -9,6 +9,7 @@ import { } from '../lib/providers'; import { searchHandlers } from '../websocket/messageHandler'; import { AIMessage, BaseMessage, HumanMessage } from '@langchain/core/messages'; +import { MetaSearchAgentType } from '../search/metaSearchAgent'; const router = express.Router(); @@ -115,18 +116,19 @@ router.post('/', async (req, res) => { return res.status(400).json({ message: 'Invalid model selected' }); } - const searchHandler = searchHandlers[body.focusMode]; + const searchHandler: MetaSearchAgentType = searchHandlers[body.focusMode]; if (!searchHandler) { return res.status(400).json({ message: 'Invalid focus mode' }); } - const emitter = searchHandler( + const emitter = await searchHandler.searchAndAnswer( body.query, history, llm, embeddings, body.optimizationMode, + [], ); let message = ''; diff --git a/src/routes/suggestions.ts b/src/routes/suggestions.ts index e997b1e..1d46e5b 100644 --- a/src/routes/suggestions.ts +++ b/src/routes/suggestions.ts @@ -1,5 +1,5 @@ import express from 'express'; -import generateSuggestions from '../agents/suggestionGeneratorAgent'; +import generateSuggestions from '../chains/suggestionGeneratorAgent'; import { BaseChatModel } from '@langchain/core/language_models/chat_models'; import { getAvailableChatModelProviders } from '../lib/providers'; import { HumanMessage, AIMessage } from '@langchain/core/messages'; diff --git a/src/routes/videos.ts b/src/routes/videos.ts index a2555f5..ad87460 100644 --- a/src/routes/videos.ts +++ b/src/routes/videos.ts @@ -3,7 +3,7 @@ import { BaseChatModel } from '@langchain/core/language_models/chat_models'; import { getAvailableChatModelProviders } from '../lib/providers'; import { HumanMessage, AIMessage } from '@langchain/core/messages'; import logger from '../utils/logger'; -import handleVideoSearch from '../agents/videoSearchAgent'; +import handleVideoSearch from '../chains/videoSearchAgent'; import { ChatOpenAI } from '@langchain/openai'; const router = express.Router(); diff --git a/src/websocket/messageHandler.ts b/src/websocket/messageHandler.ts index d2a2518..598d98a 100644 --- a/src/websocket/messageHandler.ts +++ b/src/websocket/messageHandler.ts @@ -1,11 +1,5 @@ import { EventEmitter, WebSocket } from 'ws'; import { BaseMessage, AIMessage, HumanMessage } from '@langchain/core/messages'; -import handleWebSearch from '../agents/webSearchAgent'; -import handleAcademicSearch from '../agents/academicSearchAgent'; -import handleWritingAssistant from '../agents/writingAssistant'; -import handleWolframAlphaSearch from '../agents/wolframAlphaSearchAgent'; -import handleYoutubeSearch from '../agents/youtubeSearchAgent'; -import handleRedditSearch from '../agents/redditSearchAgent'; import type { BaseChatModel } from '@langchain/core/language_models/chat_models'; import type { Embeddings } from '@langchain/core/embeddings'; import logger from '../utils/logger'; @@ -14,6 +8,10 @@ import { chats, messages as messagesSchema } from '../db/schema'; import { eq, asc, gt } from 'drizzle-orm'; import crypto from 'crypto'; import { getFileDetails } from '../utils/files'; +import MetaSearchAgent, { + MetaSearchAgentType, +} from '../search/metaSearchAgent'; +import prompts from '../prompts'; type Message = { messageId: string; @@ -23,7 +21,7 @@ type Message = { type WSMessage = { message: Message; - optimizationMode: string; + optimizationMode: 'speed' | 'balanced' | 'quality'; type: string; focusMode: string; history: Array<[string, string]>; @@ -31,12 +29,60 @@ type WSMessage = { }; export const searchHandlers = { - webSearch: handleWebSearch, - academicSearch: handleAcademicSearch, - writingAssistant: handleWritingAssistant, - wolframAlphaSearch: handleWolframAlphaSearch, - youtubeSearch: handleYoutubeSearch, - redditSearch: handleRedditSearch, + webSearch: new MetaSearchAgent({ + activeEngines: [], + queryGeneratorPrompt: prompts.webSearchRetrieverPrompt, + responsePrompt: prompts.webSearchResponsePrompt, + rerank: true, + rerankThreshold: 0.3, + searchWeb: true, + summarizer: true, + }), + academicSearch: new MetaSearchAgent({ + activeEngines: ['arxiv', 'google scholar', 'pubmed'], + queryGeneratorPrompt: prompts.academicSearchRetrieverPrompt, + responsePrompt: prompts.academicSearchResponsePrompt, + rerank: true, + rerankThreshold: 0, + searchWeb: true, + summarizer: false, + }), + writingAssistant: new MetaSearchAgent({ + activeEngines: [], + queryGeneratorPrompt: '', + responsePrompt: prompts.writingAssistantPrompt, + rerank: true, + rerankThreshold: 0, + searchWeb: false, + summarizer: false, + }), + wolframAlphaSearch: new MetaSearchAgent({ + activeEngines: ['wolframalpha'], + queryGeneratorPrompt: prompts.wolframAlphaSearchRetrieverPrompt, + responsePrompt: prompts.wolframAlphaSearchResponsePrompt, + rerank: false, + rerankThreshold: 0, + searchWeb: true, + summarizer: false, + }), + youtubeSearch: new MetaSearchAgent({ + activeEngines: ['youtube'], + queryGeneratorPrompt: prompts.youtubeSearchRetrieverPrompt, + responsePrompt: prompts.youtubeSearchResponsePrompt, + rerank: true, + rerankThreshold: 0.3, + searchWeb: true, + summarizer: false, + }), + redditSearch: new MetaSearchAgent({ + activeEngines: ['reddit'], + queryGeneratorPrompt: prompts.redditSearchRetrieverPrompt, + responsePrompt: prompts.redditSearchResponsePrompt, + rerank: true, + rerankThreshold: 0.3, + searchWeb: true, + summarizer: false, + }), }; const handleEmitterEvents = ( @@ -134,59 +180,64 @@ export const handleMessage = async ( }); if (parsedWSMessage.type === 'message') { - const handler = searchHandlers[parsedWSMessage.focusMode]; + const handler: MetaSearchAgentType = + searchHandlers[parsedWSMessage.focusMode]; if (handler) { - const emitter = handler( - parsedMessage.content, - history, - llm, - embeddings, - parsedWSMessage.optimizationMode, - parsedWSMessage.files, - ); + try { + const emitter = await handler.searchAndAnswer( + parsedMessage.content, + history, + llm, + embeddings, + parsedWSMessage.optimizationMode, + parsedWSMessage.files, + ); - handleEmitterEvents(emitter, ws, aiMessageId, parsedMessage.chatId); + handleEmitterEvents(emitter, ws, aiMessageId, parsedMessage.chatId); - const chat = await db.query.chats.findFirst({ - where: eq(chats.id, parsedMessage.chatId), - }); + const chat = await db.query.chats.findFirst({ + where: eq(chats.id, parsedMessage.chatId), + }); - if (!chat) { - await db - .insert(chats) - .values({ - id: parsedMessage.chatId, - title: parsedMessage.content, - createdAt: new Date().toString(), - focusMode: parsedWSMessage.focusMode, - files: parsedWSMessage.files.map(getFileDetails), - }) - .execute(); - } + if (!chat) { + await db + .insert(chats) + .values({ + id: parsedMessage.chatId, + title: parsedMessage.content, + createdAt: new Date().toString(), + focusMode: parsedWSMessage.focusMode, + files: parsedWSMessage.files.map(getFileDetails), + }) + .execute(); + } - const messageExists = await db.query.messages.findFirst({ - where: eq(messagesSchema.messageId, humanMessageId), - }); + const messageExists = await db.query.messages.findFirst({ + where: eq(messagesSchema.messageId, humanMessageId), + }); - if (!messageExists) { - await db - .insert(messagesSchema) - .values({ - content: parsedMessage.content, - chatId: parsedMessage.chatId, - messageId: humanMessageId, - role: 'user', - metadata: JSON.stringify({ - createdAt: new Date(), - }), - }) - .execute(); - } else { - await db - .delete(messagesSchema) - .where(gt(messagesSchema.id, messageExists.id)) - .execute(); + if (!messageExists) { + await db + .insert(messagesSchema) + .values({ + content: parsedMessage.content, + chatId: parsedMessage.chatId, + messageId: humanMessageId, + role: 'user', + metadata: JSON.stringify({ + createdAt: new Date(), + }), + }) + .execute(); + } else { + await db + .delete(messagesSchema) + .where(gt(messagesSchema.id, messageExists.id)) + .execute(); + } + } catch (err) { + console.log(err); } } else { ws.send( From e4a07995034b226946ff94df87b4069c7e35cd0a Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 29 Nov 2024 18:37:02 +0530 Subject: [PATCH 090/115] feat(package): bump version --- package.json | 2 +- src/utils/files.ts | 1 + ui/package.json | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 0368b21..3fce442 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "perplexica-backend", - "version": "1.10.0-rc1", + "version": "1.10.0-rc2", "license": "MIT", "author": "ItzCrazyKns", "scripts": { diff --git a/src/utils/files.ts b/src/utils/files.ts index 3e7a134..e6e91df 100644 --- a/src/utils/files.ts +++ b/src/utils/files.ts @@ -1,5 +1,6 @@ import path from 'path'; import fs from 'fs'; + export const getFileDetails = (fileId: string) => { const fileLoc = path.join( process.cwd(), diff --git a/ui/package.json b/ui/package.json index 6e4fc42..bdda684 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,6 +1,6 @@ { "name": "perplexica-frontend", - "version": "1.10.0-rc1", + "version": "1.10.0-rc2", "license": "MIT", "author": "ItzCrazyKns", "scripts": { From e08d86444565a1976c4888037a615070360487eb Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Sat, 30 Nov 2024 20:58:11 +0530 Subject: [PATCH 091/115] feat(focus): only icon on small devices --- ui/components/MessageInputActions/Focus.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/components/MessageInputActions/Focus.tsx b/ui/components/MessageInputActions/Focus.tsx index c95be5a..613078b 100644 --- a/ui/components/MessageInputActions/Focus.tsx +++ b/ui/components/MessageInputActions/Focus.tsx @@ -83,7 +83,7 @@ const Focus = ({ {focusMode !== 'webSearch' ? ( <div className="flex flex-row items-center space-x-1"> {focusModes.find((mode) => mode.key === focusMode)?.icon} - <p className="text-xs font-medium"> + <p className="text-xs font-medium hidden lg:block"> {focusModes.find((mode) => mode.key === focusMode)?.title} </p> <ChevronDown size={20} className="-translate-x-1" /> @@ -91,7 +91,7 @@ const Focus = ({ ) : ( <div className="flex flex-row items-center space-x-1"> <ScanEye size={20} /> - <p className="text-xs font-medium">Focus</p> + <p className="text-xs font-medium hidden lg:block">Focus</p> </div> )} </PopoverButton> From 8cb74f1964f3867e46fb431b1585f408b1f44dec Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Mon, 2 Dec 2024 21:07:59 +0530 Subject: [PATCH 092/115] feat(contribution): update guidelines --- CONTRIBUTING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 73256bd..b16eccf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,6 +8,7 @@ Perplexica's design consists of two main domains: - **Frontend (`ui` directory)**: This is a Next.js application holding all user interface components. It's a self-contained environment that manages everything the user interacts with. - **Backend (root and `src` directory)**: The backend logic is situated in the `src` folder, but the root directory holds the main `package.json` for backend dependency management. + - All of the focus modes are created using the Meta Search Agent class present in `src/search/metaSearchAgent.ts`. The main logic behind Perplexica lies there. ## Setting Up Your Environment From 5b3e8a321472fb712d66ea38caa839a650ed8a2e Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 5 Dec 2024 20:19:22 +0530 Subject: [PATCH 093/115] feat(prompts): implement new prompt --- src/prompts/academicSearch.ts | 47 +++++++++++++++++++++++++--------- src/prompts/redditSearch.ts | 47 +++++++++++++++++++++++++--------- src/prompts/webSearch.ts | 48 +++++++++++++++++++++++++---------- src/prompts/wolframAlpha.ts | 47 +++++++++++++++++++++++++--------- src/prompts/youtubeSearch.ts | 47 +++++++++++++++++++++++++--------- src/search/metaSearchAgent.ts | 1 + 6 files changed, 175 insertions(+), 62 deletions(-) diff --git a/src/prompts/academicSearch.ts b/src/prompts/academicSearch.ts index 30495ee..c2946ff 100644 --- a/src/prompts/academicSearch.ts +++ b/src/prompts/academicSearch.ts @@ -20,23 +20,46 @@ Rephrased question: `; export const academicSearchResponsePrompt = ` - You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are set on focus mode 'Academic', this means you will be searching for academic papers and articles on the web. + You are Perplexica, an AI model skilled in web search and crafting detailed, engaging, and well-structured answers. You excel at summarizing web pages and extracting relevant information to create professional, blog-style responses. - Generate a response that is informative and relevant to the user's query based on provided context (the context consits of search results containing a brief description of the content of that page). - You must use this context to answer the user's query in the best way possible. Use an unbaised and journalistic tone in your response. Do not repeat the text. - You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them. - Your responses should be medium to long in length be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative. - You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. - Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. - However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. + Your task is to provide answers that are: + - **Informative and relevant**: Thoroughly address the user's query using the given context. + - **Well-structured**: Include clear headings and subheadings, and use a professional tone to present information concisely and logically. + - **Engaging and detailed**: Write responses that read like a high-quality blog post, including extra details and relevant insights. + - **Cited and credible**: Use inline citations with [number] notation to refer to the context source(s) for each fact or detail included. + - **Explanatory and Comprehensive**: Strive to explain the topic in depth, offering detailed analysis, insights, and clarifications wherever applicable. - Anything inside the following \`context\` HTML block provided below is for your knowledge returned by the search engine and is not shared by the user. You have to answer question on the basis of it and cite the relevant information from it but you do not have to - talk about the context in your response. + ### Formatting Instructions + - **Structure**: Use a well-organized format with proper headings (e.g., "## Example heading 1" or "## Example heading 2"). Present information in paragraphs or concise bullet points where appropriate. + - **Tone and Style**: Maintain a neutral, journalistic tone with engaging narrative flow. Write as though you're crafting an in-depth article for a professional audience. + - **Markdown Usage**: Format your response with Markdown for clarity. Use headings, subheadings, bold text, and italicized words as needed to enhance readability. + - **Length and Depth**: Provide comprehensive coverage of the topic. Avoid superficial responses and strive for depth without unnecessary repetition. Expand on technical or complex topics to make them easier to understand for a general audience. + - **No main heading/title**: Start your response directly with the introduction unless asked to provide a specific title. + - **Conclusion or Summary**: Include a concluding paragraph that synthesizes the provided information or suggests potential next steps, where appropriate. + + ### Citation Requirements + - Cite every single fact, statement, or sentence using [number] notation corresponding to the source from the provided \`context\`. + - Integrate citations naturally at the end of sentences or clauses as appropriate. For example, "The Eiffel Tower is one of the most visited landmarks in the world[1]." + - Ensure that **every sentence in your response includes at least one citation**, even when information is inferred or connected to general knowledge available in the provided context. + - Use multiple sources for a single detail if applicable, such as, "Paris is a cultural hub, attracting millions of visitors annually[1][2]." + - Always prioritize credibility and accuracy by linking all statements back to their respective context sources. + - Avoid citing unsupported assumptions or personal interpretations; if no source supports a statement, clearly indicate the limitation. + + ### Special Instructions + - If the query involves technical, historical, or complex topics, provide detailed background and explanatory sections to ensure clarity. + - If the user provides vague input or if relevant information is missing, explain what additional details might help refine the search. + - If no relevant information is found, say: "Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?" Be transparent about limitations and suggest alternatives or ways to reframe the query. + - You are set on focus mode 'Academic', this means you will be searching for academic papers and articles on the web. + + ### Example Output + - Begin with a brief introduction summarizing the event or query topic. + - Follow with detailed sections under clear headings, covering all aspects of the query if possible. + - Provide explanations or historical context as needed to enhance understanding. + - End with a conclusion or overall perspective if relevant. <context> {context} </context> - If you think there's nothing relevant in the search results, you can say that 'Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?'. - Anything between the \`context\` is retrieved from a search engine and is not a part of the conversation with the user. Today's date is ${new Date().toISOString()} + Current date & time in ISO format (UTC timezone) is: {date}. `; diff --git a/src/prompts/redditSearch.ts b/src/prompts/redditSearch.ts index 1418eac..fc71957 100644 --- a/src/prompts/redditSearch.ts +++ b/src/prompts/redditSearch.ts @@ -20,23 +20,46 @@ Rephrased question: `; export const redditSearchResponsePrompt = ` - You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are set on focus mode 'Reddit', this means you will be searching for information, opinions and discussions on the web using Reddit. + You are Perplexica, an AI model skilled in web search and crafting detailed, engaging, and well-structured answers. You excel at summarizing web pages and extracting relevant information to create professional, blog-style responses. - Generate a response that is informative and relevant to the user's query based on provided context (the context consits of search results containing a brief description of the content of that page). - You must use this context to answer the user's query in the best way possible. Use an unbaised and journalistic tone in your response. Do not repeat the text. - You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them. - Your responses should be medium to long in length be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative. - You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. - Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. - However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. + Your task is to provide answers that are: + - **Informative and relevant**: Thoroughly address the user's query using the given context. + - **Well-structured**: Include clear headings and subheadings, and use a professional tone to present information concisely and logically. + - **Engaging and detailed**: Write responses that read like a high-quality blog post, including extra details and relevant insights. + - **Cited and credible**: Use inline citations with [number] notation to refer to the context source(s) for each fact or detail included. + - **Explanatory and Comprehensive**: Strive to explain the topic in depth, offering detailed analysis, insights, and clarifications wherever applicable. - Anything inside the following \`context\` HTML block provided below is for your knowledge returned by Reddit and is not shared by the user. You have to answer question on the basis of it and cite the relevant information from it but you do not have to - talk about the context in your response. + ### Formatting Instructions + - **Structure**: Use a well-organized format with proper headings (e.g., "## Example heading 1" or "## Example heading 2"). Present information in paragraphs or concise bullet points where appropriate. + - **Tone and Style**: Maintain a neutral, journalistic tone with engaging narrative flow. Write as though you're crafting an in-depth article for a professional audience. + - **Markdown Usage**: Format your response with Markdown for clarity. Use headings, subheadings, bold text, and italicized words as needed to enhance readability. + - **Length and Depth**: Provide comprehensive coverage of the topic. Avoid superficial responses and strive for depth without unnecessary repetition. Expand on technical or complex topics to make them easier to understand for a general audience. + - **No main heading/title**: Start your response directly with the introduction unless asked to provide a specific title. + - **Conclusion or Summary**: Include a concluding paragraph that synthesizes the provided information or suggests potential next steps, where appropriate. + + ### Citation Requirements + - Cite every single fact, statement, or sentence using [number] notation corresponding to the source from the provided \`context\`. + - Integrate citations naturally at the end of sentences or clauses as appropriate. For example, "The Eiffel Tower is one of the most visited landmarks in the world[1]." + - Ensure that **every sentence in your response includes at least one citation**, even when information is inferred or connected to general knowledge available in the provided context. + - Use multiple sources for a single detail if applicable, such as, "Paris is a cultural hub, attracting millions of visitors annually[1][2]." + - Always prioritize credibility and accuracy by linking all statements back to their respective context sources. + - Avoid citing unsupported assumptions or personal interpretations; if no source supports a statement, clearly indicate the limitation. + + ### Special Instructions + - If the query involves technical, historical, or complex topics, provide detailed background and explanatory sections to ensure clarity. + - If the user provides vague input or if relevant information is missing, explain what additional details might help refine the search. + - If no relevant information is found, say: "Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?" Be transparent about limitations and suggest alternatives or ways to reframe the query. + - You are set on focus mode 'Reddit', this means you will be searching for information, opinions and discussions on the web using Reddit. + + ### Example Output + - Begin with a brief introduction summarizing the event or query topic. + - Follow with detailed sections under clear headings, covering all aspects of the query if possible. + - Provide explanations or historical context as needed to enhance understanding. + - End with a conclusion or overall perspective if relevant. <context> {context} </context> - If you think there's nothing relevant in the search results, you can say that 'Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?'. - Anything between the \`context\` is retrieved from Reddit and is not a part of the conversation with the user. Today's date is ${new Date().toISOString()} + Current date & time in ISO format (UTC timezone) is: {date}. `; diff --git a/src/prompts/webSearch.ts b/src/prompts/webSearch.ts index 834bbfe..d8269c8 100644 --- a/src/prompts/webSearch.ts +++ b/src/prompts/webSearch.ts @@ -62,25 +62,45 @@ Rephrased question: `; export const webSearchResponsePrompt = ` - You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are also an expert at summarizing web pages or documents and searching for content in them. + You are Perplexica, an AI model skilled in web search and crafting detailed, engaging, and well-structured answers. You excel at summarizing web pages and extracting relevant information to create professional, blog-style responses. - Generate a response that is informative and relevant to the user's query based on provided context (the context consits of search results containing a brief description of the content of that page). - You must use this context to answer the user's query in the best way possible. Use an unbaised and journalistic tone in your response. Do not repeat the text. - You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them. - If the query contains some links and the user asks to answer from those links you will be provided the entire content of the page inside the \`context\` XML block. You can then use this content to answer the user's query. - If the user asks to summarize content from some links, you will be provided the entire content of the page inside the \`context\` XML block. You can then use this content to summarize the text. The content provided inside the \`context\` block will be already summarized by another model so you just need to use that content to answer the user's query. - Your responses should be medium to long in length be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative. - You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. - Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. - However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. + Your task is to provide answers that are: + - **Informative and relevant**: Thoroughly address the user's query using the given context. + - **Well-structured**: Include clear headings and subheadings, and use a professional tone to present information concisely and logically. + - **Engaging and detailed**: Write responses that read like a high-quality blog post, including extra details and relevant insights. + - **Cited and credible**: Use inline citations with [number] notation to refer to the context source(s) for each fact or detail included. + - **Explanatory and Comprehensive**: Strive to explain the topic in depth, offering detailed analysis, insights, and clarifications wherever applicable. - Anything inside the following \`context\` HTML block provided below is for your knowledge returned by the search engine and is not shared by the user. You have to answer question on the basis of it and cite the relevant information from it but you do not have to - talk about the context in your response. + ### Formatting Instructions + - **Structure**: Use a well-organized format with proper headings (e.g., "## Example heading 1" or "## Example heading 2"). Present information in paragraphs or concise bullet points where appropriate. + - **Tone and Style**: Maintain a neutral, journalistic tone with engaging narrative flow. Write as though you're crafting an in-depth article for a professional audience. + - **Markdown Usage**: Format your response with Markdown for clarity. Use headings, subheadings, bold text, and italicized words as needed to enhance readability. + - **Length and Depth**: Provide comprehensive coverage of the topic. Avoid superficial responses and strive for depth without unnecessary repetition. Expand on technical or complex topics to make them easier to understand for a general audience. + - **No main heading/title**: Start your response directly with the introduction unless asked to provide a specific title. + - **Conclusion or Summary**: Include a concluding paragraph that synthesizes the provided information or suggests potential next steps, where appropriate. + + ### Citation Requirements + - Cite every single fact, statement, or sentence using [number] notation corresponding to the source from the provided \`context\`. + - Integrate citations naturally at the end of sentences or clauses as appropriate. For example, "The Eiffel Tower is one of the most visited landmarks in the world[1]." + - Ensure that **every sentence in your response includes at least one citation**, even when information is inferred or connected to general knowledge available in the provided context. + - Use multiple sources for a single detail if applicable, such as, "Paris is a cultural hub, attracting millions of visitors annually[1][2]." + - Always prioritize credibility and accuracy by linking all statements back to their respective context sources. + - Avoid citing unsupported assumptions or personal interpretations; if no source supports a statement, clearly indicate the limitation. + + ### Special Instructions + - If the query involves technical, historical, or complex topics, provide detailed background and explanatory sections to ensure clarity. + - If the user provides vague input or if relevant information is missing, explain what additional details might help refine the search. + - If no relevant information is found, say: "Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?" Be transparent about limitations and suggest alternatives or ways to reframe the query. + + ### Example Output + - Begin with a brief introduction summarizing the event or query topic. + - Follow with detailed sections under clear headings, covering all aspects of the query if possible. + - Provide explanations or historical context as needed to enhance understanding. + - End with a conclusion or overall perspective if relevant. <context> {context} </context> - If you think there's nothing relevant in the search results, you can say that 'Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?'. You do not need to do this for summarization tasks. - Anything between the \`context\` is retrieved from a search engine and is not a part of the conversation with the user. Today's date is ${new Date().toISOString()} + Current date & time in ISO format (UTC timezone) is: {date}. `; diff --git a/src/prompts/wolframAlpha.ts b/src/prompts/wolframAlpha.ts index 2e9c022..40410c1 100644 --- a/src/prompts/wolframAlpha.ts +++ b/src/prompts/wolframAlpha.ts @@ -20,23 +20,46 @@ Rephrased question: `; export const wolframAlphaSearchResponsePrompt = ` - You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are set on focus mode 'Wolfram Alpha', this means you will be searching for information on the web using Wolfram Alpha. It is a computational knowledge engine that can answer factual queries and perform computations. + You are Perplexica, an AI model skilled in web search and crafting detailed, engaging, and well-structured answers. You excel at summarizing web pages and extracting relevant information to create professional, blog-style responses. - Generate a response that is informative and relevant to the user's query based on provided context (the context consits of search results containing a brief description of the content of that page). - You must use this context to answer the user's query in the best way possible. Use an unbaised and journalistic tone in your response. Do not repeat the text. - You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them. - Your responses should be medium to long in length be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative. - You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. - Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. - However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. + Your task is to provide answers that are: + - **Informative and relevant**: Thoroughly address the user's query using the given context. + - **Well-structured**: Include clear headings and subheadings, and use a professional tone to present information concisely and logically. + - **Engaging and detailed**: Write responses that read like a high-quality blog post, including extra details and relevant insights. + - **Cited and credible**: Use inline citations with [number] notation to refer to the context source(s) for each fact or detail included. + - **Explanatory and Comprehensive**: Strive to explain the topic in depth, offering detailed analysis, insights, and clarifications wherever applicable. - Anything inside the following \`context\` HTML block provided below is for your knowledge returned by Wolfram Alpha and is not shared by the user. You have to answer question on the basis of it and cite the relevant information from it but you do not have to - talk about the context in your response. + ### Formatting Instructions + - **Structure**: Use a well-organized format with proper headings (e.g., "## Example heading 1" or "## Example heading 2"). Present information in paragraphs or concise bullet points where appropriate. + - **Tone and Style**: Maintain a neutral, journalistic tone with engaging narrative flow. Write as though you're crafting an in-depth article for a professional audience. + - **Markdown Usage**: Format your response with Markdown for clarity. Use headings, subheadings, bold text, and italicized words as needed to enhance readability. + - **Length and Depth**: Provide comprehensive coverage of the topic. Avoid superficial responses and strive for depth without unnecessary repetition. Expand on technical or complex topics to make them easier to understand for a general audience. + - **No main heading/title**: Start your response directly with the introduction unless asked to provide a specific title. + - **Conclusion or Summary**: Include a concluding paragraph that synthesizes the provided information or suggests potential next steps, where appropriate. + + ### Citation Requirements + - Cite every single fact, statement, or sentence using [number] notation corresponding to the source from the provided \`context\`. + - Integrate citations naturally at the end of sentences or clauses as appropriate. For example, "The Eiffel Tower is one of the most visited landmarks in the world[1]." + - Ensure that **every sentence in your response includes at least one citation**, even when information is inferred or connected to general knowledge available in the provided context. + - Use multiple sources for a single detail if applicable, such as, "Paris is a cultural hub, attracting millions of visitors annually[1][2]." + - Always prioritize credibility and accuracy by linking all statements back to their respective context sources. + - Avoid citing unsupported assumptions or personal interpretations; if no source supports a statement, clearly indicate the limitation. + + ### Special Instructions + - If the query involves technical, historical, or complex topics, provide detailed background and explanatory sections to ensure clarity. + - If the user provides vague input or if relevant information is missing, explain what additional details might help refine the search. + - If no relevant information is found, say: "Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?" Be transparent about limitations and suggest alternatives or ways to reframe the query. + - You are set on focus mode 'Wolfram Alpha', this means you will be searching for information on the web using Wolfram Alpha. It is a computational knowledge engine that can answer factual queries and perform computations. + + ### Example Output + - Begin with a brief introduction summarizing the event or query topic. + - Follow with detailed sections under clear headings, covering all aspects of the query if possible. + - Provide explanations or historical context as needed to enhance understanding. + - End with a conclusion or overall perspective if relevant. <context> {context} </context> - If you think there's nothing relevant in the search results, you can say that 'Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?'. - Anything between the \`context\` is retrieved from Wolfram Alpha and is not a part of the conversation with the user. Today's date is ${new Date().toISOString()} + Current date & time in ISO format (UTC timezone) is: {date}. `; diff --git a/src/prompts/youtubeSearch.ts b/src/prompts/youtubeSearch.ts index 5c729cb..5805b54 100644 --- a/src/prompts/youtubeSearch.ts +++ b/src/prompts/youtubeSearch.ts @@ -20,23 +20,46 @@ Rephrased question: `; export const youtubeSearchResponsePrompt = ` - You are Perplexica, an AI model who is expert at searching the web and answering user's queries. You are set on focus mode 'Youtube', this means you will be searching for videos on the web using Youtube and providing information based on the video's transcript. + You are Perplexica, an AI model skilled in web search and crafting detailed, engaging, and well-structured answers. You excel at summarizing web pages and extracting relevant information to create professional, blog-style responses. - Generate a response that is informative and relevant to the user's query based on provided context (the context consits of search results containing a brief description of the content of that page). - You must use this context to answer the user's query in the best way possible. Use an unbaised and journalistic tone in your response. Do not repeat the text. - You must not tell the user to open any link or visit any website to get the answer. You must provide the answer in the response itself. If the user asks for links you can provide them. - Your responses should be medium to long in length be informative and relevant to the user's query. You can use markdowns to format your response. You should use bullet points to list the information. Make sure the answer is not short and is informative. - You have to cite the answer using [number] notation. You must cite the sentences with their relevent context number. You must cite each and every part of the answer so the user can know where the information is coming from. - Place these citations at the end of that particular sentence. You can cite the same sentence multiple times if it is relevant to the user's query like [number1][number2]. - However you do not need to cite it using the same number. You can use different numbers to cite the same sentence multiple times. The number refers to the number of the search result (passed in the context) used to generate that part of the answer. + Your task is to provide answers that are: + - **Informative and relevant**: Thoroughly address the user's query using the given context. + - **Well-structured**: Include clear headings and subheadings, and use a professional tone to present information concisely and logically. + - **Engaging and detailed**: Write responses that read like a high-quality blog post, including extra details and relevant insights. + - **Cited and credible**: Use inline citations with [number] notation to refer to the context source(s) for each fact or detail included. + - **Explanatory and Comprehensive**: Strive to explain the topic in depth, offering detailed analysis, insights, and clarifications wherever applicable. - Anything inside the following \`context\` HTML block provided below is for your knowledge returned by Youtube and is not shared by the user. You have to answer question on the basis of it and cite the relevant information from it but you do not have to - talk about the context in your response. + ### Formatting Instructions + - **Structure**: Use a well-organized format with proper headings (e.g., "## Example heading 1" or "## Example heading 2"). Present information in paragraphs or concise bullet points where appropriate. + - **Tone and Style**: Maintain a neutral, journalistic tone with engaging narrative flow. Write as though you're crafting an in-depth article for a professional audience. + - **Markdown Usage**: Format your response with Markdown for clarity. Use headings, subheadings, bold text, and italicized words as needed to enhance readability. + - **Length and Depth**: Provide comprehensive coverage of the topic. Avoid superficial responses and strive for depth without unnecessary repetition. Expand on technical or complex topics to make them easier to understand for a general audience. + - **No main heading/title**: Start your response directly with the introduction unless asked to provide a specific title. + - **Conclusion or Summary**: Include a concluding paragraph that synthesizes the provided information or suggests potential next steps, where appropriate. + + ### Citation Requirements + - Cite every single fact, statement, or sentence using [number] notation corresponding to the source from the provided \`context\`. + - Integrate citations naturally at the end of sentences or clauses as appropriate. For example, "The Eiffel Tower is one of the most visited landmarks in the world[1]." + - Ensure that **every sentence in your response includes at least one citation**, even when information is inferred or connected to general knowledge available in the provided context. + - Use multiple sources for a single detail if applicable, such as, "Paris is a cultural hub, attracting millions of visitors annually[1][2]." + - Always prioritize credibility and accuracy by linking all statements back to their respective context sources. + - Avoid citing unsupported assumptions or personal interpretations; if no source supports a statement, clearly indicate the limitation. + + ### Special Instructions + - If the query involves technical, historical, or complex topics, provide detailed background and explanatory sections to ensure clarity. + - If the user provides vague input or if relevant information is missing, explain what additional details might help refine the search. + - If no relevant information is found, say: "Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?" Be transparent about limitations and suggest alternatives or ways to reframe the query. + - You are set on focus mode 'Youtube', this means you will be searching for videos on the web using Youtube and providing information based on the video's transcrip + + ### Example Output + - Begin with a brief introduction summarizing the event or query topic. + - Follow with detailed sections under clear headings, covering all aspects of the query if possible. + - Provide explanations or historical context as needed to enhance understanding. + - End with a conclusion or overall perspective if relevant. <context> {context} </context> - If you think there's nothing relevant in the search results, you can say that 'Hmm, sorry I could not find any relevant information on this topic. Would you like me to search again or ask something else?'. - Anything between the \`context\` is retrieved from Youtube and is not a part of the conversation with the user. Today's date is ${new Date().toISOString()} + Current date & time in ISO format (UTC timezone) is: {date}. `; diff --git a/src/search/metaSearchAgent.ts b/src/search/metaSearchAgent.ts index 0dde085..b1d8114 100644 --- a/src/search/metaSearchAgent.ts +++ b/src/search/metaSearchAgent.ts @@ -236,6 +236,7 @@ class MetaSearchAgent implements MetaSearchAgentType { RunnableMap.from({ query: (input: BasicChainInput) => input.query, chat_history: (input: BasicChainInput) => input.chat_history, + date: () => new Date().toISOString(), context: RunnableLambda.from(async (input: BasicChainInput) => { const processedHistory = formatChatHistoryAsString( input.chat_history, From db7407bfac20825333da330aaf9869be06722910 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 5 Dec 2024 20:19:41 +0530 Subject: [PATCH 094/115] feat(messageBox): style markdown --- ui/components/MessageBox.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/components/MessageBox.tsx b/ui/components/MessageBox.tsx index 5222c7c..f23127c 100644 --- a/ui/components/MessageBox.tsx +++ b/ui/components/MessageBox.tsx @@ -107,8 +107,8 @@ const MessageBox = ({ </div> <Markdown className={cn( - 'prose dark:prose-invert prose-p:leading-relaxed prose-pre:p-0', - 'max-w-none break-words text-black dark:text-white text-sm md:text-base font-medium', + 'prose prose-h1:mb-3 prose-h2:mb-2 prose-h2:mt-6 prose-h2:font-[800] prose-h3:mt-4 prose-h3:mb-1.5 prose-h3:font-[600] dark:prose-invert prose-p:leading-relaxed prose-pre:p-0 font-[400]', + 'max-w-none break-words text-black dark:text-white', )} > {parsedMessage} From 2c5ca94b3c7c5f1c7425fb0d7f7603d857690c30 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 5 Dec 2024 20:19:52 +0530 Subject: [PATCH 095/115] feat(app): lint and beautify --- docs/installation/NETWORKING.md | 90 ++++++++++++++++----------------- src/routes/config.ts | 2 +- 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/docs/installation/NETWORKING.md b/docs/installation/NETWORKING.md index 6cb9bfe..ae39e3f 100644 --- a/docs/installation/NETWORKING.md +++ b/docs/installation/NETWORKING.md @@ -10,27 +10,27 @@ This guide will show you how to make Perplexica available over a network. Follow 3. Stop and remove the existing Perplexica containers and images: - ```bash - docker compose down --rmi all - ``` + ```bash + docker compose down --rmi all + ``` 4. Open the `docker-compose.yaml` file in a text editor like Notepad++ 5. Replace `127.0.0.1` with the IP address of the server Perplexica is running on in these two lines: - ```bash - args: - - NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api - - NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001 - ``` + ```bash + args: + - NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api + - NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001 + ``` 6. Save and close the `docker-compose.yaml` file 7. Rebuild and restart the Perplexica container: - ```bash - docker compose up -d --build - ``` + ```bash + docker compose up -d --build + ``` ## macOS @@ -38,37 +38,37 @@ This guide will show you how to make Perplexica available over a network. Follow 2. Navigate to the directory with the `docker-compose.yaml` file: - ```bash - cd /path/to/docker-compose.yaml - ``` + ```bash + cd /path/to/docker-compose.yaml + ``` 3. Stop and remove existing containers and images: - ```bash - docker compose down --rmi all - ``` + ```bash + docker compose down --rmi all + ``` 4. Open `docker-compose.yaml` in a text editor like Sublime Text: - ```bash - nano docker-compose.yaml - ``` + ```bash + nano docker-compose.yaml + ``` 5. Replace `127.0.0.1` with the server IP in these lines: - ```bash - args: - - NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api - - NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001 - ``` + ```bash + args: + - NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api + - NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001 + ``` 6. Save and exit the editor 7. Rebuild and restart Perplexica: - ```bash - docker compose up -d --build - ``` + ```bash + docker compose up -d --build + ``` ## Linux @@ -76,34 +76,34 @@ This guide will show you how to make Perplexica available over a network. Follow 2. Navigate to the `docker-compose.yaml` directory: - ```bash - cd /path/to/docker-compose.yaml - ``` + ```bash + cd /path/to/docker-compose.yaml + ``` 3. Stop and remove containers and images: - ```bash - docker compose down --rmi all - ``` + ```bash + docker compose down --rmi all + ``` 4. Edit `docker-compose.yaml`: - ```bash - nano docker-compose.yaml - ``` + ```bash + nano docker-compose.yaml + ``` 5. Replace `127.0.0.1` with the server IP: - ```bash - args: - - NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api - - NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001 - ``` + ```bash + args: + - NEXT_PUBLIC_API_URL=http://127.0.0.1:3001/api + - NEXT_PUBLIC_WS_URL=ws://127.0.0.1:3001 + ``` 6. Save and exit the editor 7. Rebuild and restart Perplexica: - ```bash - docker compose up -d --build - ``` + ```bash + docker compose up -d --build + ``` diff --git a/src/routes/config.ts b/src/routes/config.ts index 38192b7..6ff80c6 100644 --- a/src/routes/config.ts +++ b/src/routes/config.ts @@ -54,7 +54,7 @@ router.get('/', async (_, res) => { config['anthropicApiKey'] = getAnthropicApiKey(); config['groqApiKey'] = getGroqApiKey(); config['geminiApiKey'] = getGeminiApiKey(); - + res.status(200).json(config); } catch (err: any) { res.status(500).json({ message: 'An error has occurred.' }); From 1c3c6890398efa6eabfab7e0fb1744494cb26fec Mon Sep 17 00:00:00 2001 From: Ying-Shan Lin <yslinear@gmail.com> Date: Fri, 13 Dec 2024 17:24:15 +0800 Subject: [PATCH 096/115] feat(anthropic): update chat models to include Claude 3.5 Haiku and new version for Sonnet --- src/lib/providers/anthropic.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/lib/providers/anthropic.ts b/src/lib/providers/anthropic.ts index 90460c6..642a6cb 100644 --- a/src/lib/providers/anthropic.ts +++ b/src/lib/providers/anthropic.ts @@ -9,12 +9,20 @@ export const loadAnthropicChatModels = async () => { try { const chatModels = { - 'claude-3-5-sonnet-20240620': { + 'claude-3-5-sonnet-20241022': { displayName: 'Claude 3.5 Sonnet', model: new ChatAnthropic({ temperature: 0.7, anthropicApiKey: anthropicApiKey, - model: 'claude-3-5-sonnet-20240620', + model: 'claude-3-5-sonnet-20241022', + }), + }, + 'claude-3-5-haiku-20241022': { + displayName: 'Claude 3.5 Haiku', + model: new ChatAnthropic({ + temperature: 0.7, + anthropicApiKey: anthropicApiKey, + model: 'claude-3-5-haiku-20241022', }), }, 'claude-3-opus-20240229': { From f30a61c4aa9c0c1289b39aca6d9ac158fdee7efa Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Mon, 16 Dec 2024 18:24:01 +0530 Subject: [PATCH 097/115] feat(metaSearchAgent): handle `undefined` content for YT. search --- src/search/metaSearchAgent.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/search/metaSearchAgent.ts b/src/search/metaSearchAgent.ts index b1d8114..1e85cf6 100644 --- a/src/search/metaSearchAgent.ts +++ b/src/search/metaSearchAgent.ts @@ -211,7 +211,11 @@ class MetaSearchAgent implements MetaSearchAgentType { const documents = res.results.map( (result) => new Document({ - pageContent: result.content, + pageContent: + result.content || + this.config.activeEngines.includes('youtube') + ? result.title + : '' /* Todo: Implement transcript grabbing using Youtubei (source: https://www.npmjs.com/package/youtubei) */, metadata: { title: result.title, url: result.url, @@ -414,7 +418,10 @@ class MetaSearchAgent implements MetaSearchAgentType { private processDocs(docs: Document[]) { return docs - .map((_, index) => `${index + 1}. ${docs[index].pageContent}`) + .map( + (_, index) => + `${index + 1}. ${docs[index].metadata.title} ${docs[index].pageContent}`, + ) .join('\n'); } From c3a231a528d969e72cd5d83a83ca4e3ddb9ee849 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Mon, 16 Dec 2024 20:59:21 +0530 Subject: [PATCH 098/115] feat(readme): add discord server --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 721d41c..cf9e459 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ # 🚀 Perplexica - An AI-powered search engine 🔎 <!-- omit in toc --> +[![Discord](https://dcbadge.vercel.app/api/server/26aArMy8tT?style=flat&compact=true)](https://discord.gg/26aArMy8tT) + + ![preview](.assets/perplexica-screenshot.png?) ## Table of Contents <!-- omit in toc --> From 4cb38148b31eb53db37a9447450847f6d0c8ac96 Mon Sep 17 00:00:00 2001 From: Bart Jaskulski <bjaskulski@protonmail.com> Date: Thu, 19 Dec 2024 08:07:14 +0100 Subject: [PATCH 099/115] Remove deprecated Groq models Signed-off-by: Bart Jaskulski <bjaskulski@protonmail.com> --- src/lib/providers/groq.ts | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/src/lib/providers/groq.ts b/src/lib/providers/groq.ts index 62ca2d7..16f251b 100644 --- a/src/lib/providers/groq.ts +++ b/src/lib/providers/groq.ts @@ -48,19 +48,6 @@ export const loadGroqChatModels = async () => { }, ), }, - 'llama-3.1-70b-versatile': { - displayName: 'Llama 3.1 70B', - model: new ChatOpenAI( - { - openAIApiKey: groqApiKey, - modelName: 'llama-3.1-70b-versatile', - temperature: 0.7, - }, - { - baseURL: 'https://api.groq.com/openai/v1', - }, - ), - }, 'llama-3.1-8b-instant': { displayName: 'Llama 3.1 8B', model: new ChatOpenAI( @@ -113,19 +100,6 @@ export const loadGroqChatModels = async () => { }, ), }, - 'gemma-7b-it': { - displayName: 'Gemma 7B', - model: new ChatOpenAI( - { - openAIApiKey: groqApiKey, - modelName: 'gemma-7b-it', - temperature: 0.7, - }, - { - baseURL: 'https://api.groq.com/openai/v1', - }, - ), - }, 'gemma2-9b-it': { displayName: 'Gemma2 9B', model: new ChatOpenAI( From 960e34aa3df48ea85777796f2aa5aa08812f79fb Mon Sep 17 00:00:00 2001 From: Bart Jaskulski <bjaskulski@protonmail.com> Date: Thu, 19 Dec 2024 08:07:36 +0100 Subject: [PATCH 100/115] Add Llama 3.3 model from Groq Signed-off-by: Bart Jaskulski <bjaskulski@protonmail.com> --- src/lib/providers/groq.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/lib/providers/groq.ts b/src/lib/providers/groq.ts index 16f251b..41004ec 100644 --- a/src/lib/providers/groq.ts +++ b/src/lib/providers/groq.ts @@ -9,6 +9,19 @@ export const loadGroqChatModels = async () => { try { const chatModels = { + 'llama-3.3-70b-versatile': { + displayName: 'Llama 3.3 70B', + model: new ChatOpenAI( + { + openAIApiKey: groqApiKey, + modelName: 'llama-3.3-70b-versatile', + temperature: 0.7, + }, + { + baseURL: 'https://api.groq.com/openai/v1', + }, + ), + }, 'llama-3.2-3b-preview': { displayName: 'Llama 3.2 3B', model: new ChatOpenAI( From d30f714930e39ddd6192317902b1134899de5dc3 Mon Sep 17 00:00:00 2001 From: hacking-racoon <ckgudwlscjsw@naver.com> Date: Wed, 25 Dec 2024 15:19:23 +0900 Subject: [PATCH 101/115] feat(SearchVideos): Modify Lightbox to pause the prev video when moving to next one, preventing interference with new video. --- ui/components/SearchVideos.tsx | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/ui/components/SearchVideos.tsx b/ui/components/SearchVideos.tsx index 2d820ef..170df61 100644 --- a/ui/components/SearchVideos.tsx +++ b/ui/components/SearchVideos.tsx @@ -1,6 +1,6 @@ /* eslint-disable @next/next/no-img-element */ import { PlayCircle, PlayIcon, PlusIcon, VideoIcon } from 'lucide-react'; -import { useState } from 'react'; +import { useRef, useState } from 'react'; import Lightbox, { GenericSlide, VideoSlide } from 'yet-another-react-lightbox'; import 'yet-another-react-lightbox/styles.css'; import { Message } from './ChatWindow'; @@ -35,6 +35,8 @@ const Searchvideos = ({ const [loading, setLoading] = useState(false); const [open, setOpen] = useState(false); const [slides, setSlides] = useState<VideoSlide[]>([]); + const [currentIndex, setCurrentIndex] = useState(0); + const videoRefs = useRef<(HTMLIFrameElement | null)[]>([]); return ( <> @@ -182,18 +184,39 @@ const Searchvideos = ({ open={open} close={() => setOpen(false)} slides={slides} + index={currentIndex} + on={{ + view: ({ index }) => { + const previousIframe = videoRefs.current[currentIndex]; + if (previousIframe?.contentWindow) { + previousIframe.contentWindow.postMessage( + '{"event":"command","func":"pauseVideo","args":""}', + '*', + ); + } + + setCurrentIndex(index); + }, + }} render={{ - slide: ({ slide }) => - slide.type === 'video-slide' ? ( + slide: ({ slide }) => { + const index = slides.findIndex((s) => s === slide); + return slide.type === 'video-slide' ? ( <div className="h-full w-full flex flex-row items-center justify-center"> <iframe - src={slide.iframe_src} + src={`${slide.iframe_src}${slide.iframe_src.includes('?') ? '&' : '?'}enablejsapi=1`} + ref={(el) => { + if (el) { + videoRefs.current[index] = el; + } + }} className="aspect-video max-h-[95vh] w-[95vw] rounded-2xl md:w-[80vw]" allowFullScreen allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" /> </div> - ) : null, + ) : null; + }, }} /> </> From b5acf34ef8c7cddebd0b6978a5ab8135e5cfb9dc Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 26 Dec 2024 18:59:57 +0530 Subject: [PATCH 102/115] feat(chat-window): fix bugs handling custom openai, closes #529 --- ui/components/ChatWindow.tsx | 46 +++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index fd3d0a6..62fa9dc 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -43,6 +43,14 @@ const useSocket = ( let embeddingModelProvider = localStorage.getItem( 'embeddingModelProvider', ); + let openAIBaseURL = + chatModelProvider === 'custom_openai' + ? localStorage.getItem('openAIBaseURL') + : null; + let openAIPIKey = + chatModelProvider === 'custom_openai' + ? localStorage.getItem('openAIApiKey') + : null; const providers = await fetch( `${process.env.NEXT_PUBLIC_API_URL}/models`, @@ -62,16 +70,18 @@ const useSocket = ( if (!chatModel || !chatModelProvider) { const chatModelProviders = providers.chatModelProviders; - chatModelProvider = Object.keys(chatModelProviders)[0]; + chatModelProvider = + chatModelProvider || Object.keys(chatModelProviders)[0]; if (chatModelProvider === 'custom_openai') { toast.error( - 'Seems like you are using the custom OpenAI provider, please open the settings and configure the API key and base URL', + 'Seems like you are using the custom OpenAI provider, please open the settings and enter a model name to use.', ); setError(true); return; } else { chatModel = Object.keys(chatModelProviders[chatModelProvider])[0]; + if ( !chatModelProviders || Object.keys(chatModelProviders).length === 0 @@ -108,18 +118,42 @@ const useSocket = ( if ( Object.keys(chatModelProviders).length > 0 && - !chatModelProviders[chatModelProvider] + (((!openAIBaseURL || !openAIPIKey) && + chatModelProvider === 'custom_openai') || + !chatModelProviders[chatModelProvider]) ) { - chatModelProvider = Object.keys(chatModelProviders)[0]; + const chatModelProvidersKeys = Object.keys(chatModelProviders); + chatModelProvider = + chatModelProvidersKeys.find( + (key) => Object.keys(chatModelProviders[key]).length > 0, + ) || chatModelProvidersKeys[0]; + + if ( + chatModelProvider === 'custom_openai' && + (!openAIBaseURL || !openAIPIKey) + ) { + toast.error( + 'Seems like you are using the custom OpenAI provider, please open the settings and configure the API key and base URL', + ); + setError(true); + return; + } + localStorage.setItem('chatModelProvider', chatModelProvider); } if ( chatModelProvider && - chatModelProvider != 'custom_openai' && + (!openAIBaseURL || !openAIPIKey) && !chatModelProviders[chatModelProvider][chatModel] ) { - chatModel = Object.keys(chatModelProviders[chatModelProvider])[0]; + chatModel = Object.keys( + chatModelProviders[ + Object.keys(chatModelProviders[chatModelProvider]).length > 0 + ? chatModelProvider + : Object.keys(chatModelProviders)[0] + ], + )[0]; localStorage.setItem('chatModel', chatModel); } From 409c811a4286b2ca17be38acda326faef7e04004 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Thu, 26 Dec 2024 19:02:20 +0530 Subject: [PATCH 103/115] feat(ollama): use axios instead of fetch --- src/lib/providers/ollama.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/lib/providers/ollama.ts b/src/lib/providers/ollama.ts index e23fb76..7277b27 100644 --- a/src/lib/providers/ollama.ts +++ b/src/lib/providers/ollama.ts @@ -2,6 +2,7 @@ import { OllamaEmbeddings } from '@langchain/community/embeddings/ollama'; import { getKeepAlive, getOllamaApiEndpoint } from '../../config'; import logger from '../../utils/logger'; import { ChatOllama } from '@langchain/community/chat_models/ollama'; +import axios from 'axios'; export const loadOllamaChatModels = async () => { const ollamaEndpoint = getOllamaApiEndpoint(); @@ -10,13 +11,13 @@ export const loadOllamaChatModels = async () => { if (!ollamaEndpoint) return {}; try { - const response = await fetch(`${ollamaEndpoint}/api/tags`, { + const response = await axios.get(`${ollamaEndpoint}/api/tags`, { headers: { 'Content-Type': 'application/json', }, }); - const { models: ollamaModels } = (await response.json()) as any; + const { models: ollamaModels } = response.data; const chatModels = ollamaModels.reduce((acc, model) => { acc[model.model] = { @@ -45,13 +46,13 @@ export const loadOllamaEmbeddingsModels = async () => { if (!ollamaEndpoint) return {}; try { - const response = await fetch(`${ollamaEndpoint}/api/tags`, { + const response = await axios.get(`${ollamaEndpoint}/api/tags`, { headers: { 'Content-Type': 'application/json', }, }); - const { models: ollamaModels } = (await response.json()) as any; + const { models: ollamaModels } = response.data; const embeddingsModels = ollamaModels.reduce((acc, model) => { acc[model.model] = { From d18e88acc97cc26b533778fc74743c93529f130c Mon Sep 17 00:00:00 2001 From: Sainadh Devireddy <saidev@amazon.com> Date: Fri, 27 Dec 2024 20:55:55 -0800 Subject: [PATCH 104/115] Delete msgs only belonging to the chat --- src/websocket/messageHandler.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/websocket/messageHandler.ts b/src/websocket/messageHandler.ts index 6cb3ddf..8817aae 100644 --- a/src/websocket/messageHandler.ts +++ b/src/websocket/messageHandler.ts @@ -5,7 +5,7 @@ import type { Embeddings } from '@langchain/core/embeddings'; import logger from '../utils/logger'; import db from '../db'; import { chats, messages as messagesSchema } from '../db/schema'; -import { eq, asc, gt } from 'drizzle-orm'; +import { eq, asc, gt, and } from 'drizzle-orm'; import crypto from 'crypto'; import { getFileDetails } from '../utils/files'; import MetaSearchAgent, { @@ -238,7 +238,7 @@ export const handleMessage = async ( } else { await db .delete(messagesSchema) - .where(gt(messagesSchema.id, messageExists.id)) + .where(and(gt(messagesSchema.id, messageExists.id), eq(messagesSchema.chatId, parsedMessage.chatId))) .execute(); } } catch (err) { From 5a648f34b8c7f31b051dc9b7b94855a9f57a884f Mon Sep 17 00:00:00 2001 From: Sainadh Devireddy <saidev@amazon.com> Date: Sat, 4 Jan 2025 10:36:33 -0800 Subject: [PATCH 105/115] Set pageContent correctly --- src/search/metaSearchAgent.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/search/metaSearchAgent.ts b/src/search/metaSearchAgent.ts index 1e85cf6..ee82c10 100644 --- a/src/search/metaSearchAgent.ts +++ b/src/search/metaSearchAgent.ts @@ -213,9 +213,9 @@ class MetaSearchAgent implements MetaSearchAgentType { new Document({ pageContent: result.content || - this.config.activeEngines.includes('youtube') + (this.config.activeEngines.includes('youtube') ? result.title - : '' /* Todo: Implement transcript grabbing using Youtubei (source: https://www.npmjs.com/package/youtubei) */, + : '') /* Todo: Implement transcript grabbing using Youtubei (source: https://www.npmjs.com/package/youtubei) */, metadata: { title: result.title, url: result.url, From 5526d5f60f31ec76e01e8f8482cf873ff6522202 Mon Sep 17 00:00:00 2001 From: realies <5107843+realies@users.noreply.github.com> Date: Sun, 5 Jan 2025 17:29:53 +0000 Subject: [PATCH 106/115] fix(ws-error): add exponential reconnect mechanism --- ui/components/ChatWindow.tsx | 102 ++++++++++++++++++++++++++++------- 1 file changed, 82 insertions(+), 20 deletions(-) diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index 62fa9dc..3968d92 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -9,7 +9,7 @@ import crypto from 'crypto'; import { toast } from 'sonner'; import { useSearchParams } from 'next/navigation'; import { getSuggestions } from '@/lib/actions'; -import Error from 'next/error'; +import NextError from 'next/error'; export type Message = { messageId: string; @@ -32,11 +32,24 @@ const useSocket = ( setIsWSReady: (ready: boolean) => void, setError: (error: boolean) => void, ) => { - const [ws, setWs] = useState<WebSocket | null>(null); + const wsRef = useRef<WebSocket | null>(null); + const reconnectTimeoutRef = useRef<NodeJS.Timeout>(); + const retryCountRef = useRef(0); + const isCleaningUpRef = useRef(false); + const MAX_RETRIES = 3; + const INITIAL_BACKOFF = 1000; // 1 second + + const getBackoffDelay = (retryCount: number) => { + return Math.min(INITIAL_BACKOFF * Math.pow(2, retryCount), 10000); // Cap at 10 seconds + }; useEffect(() => { - if (!ws) { - const connectWs = async () => { + const connectWs = async () => { + if (wsRef.current?.readyState === WebSocket.OPEN) { + wsRef.current.close(); + } + + try { let chatModel = localStorage.getItem('chatModel'); let chatModelProvider = localStorage.getItem('chatModelProvider'); let embeddingModel = localStorage.getItem('embeddingModel'); @@ -59,7 +72,10 @@ const useSocket = ( 'Content-Type': 'application/json', }, }, - ).then(async (res) => await res.json()); + ).then(async (res) => { + if (!res.ok) throw new Error(`Failed to fetch models: ${res.status} ${res.statusText}`); + return res.json(); + }); if ( !chatModel || @@ -202,6 +218,7 @@ const useSocket = ( wsURL.search = searchParams.toString(); const ws = new WebSocket(wsURL.toString()); + wsRef.current = ws; const timeoutId = setTimeout(() => { if (ws.readyState !== 1) { @@ -217,11 +234,14 @@ const useSocket = ( const interval = setInterval(() => { if (ws.readyState === 1) { setIsWSReady(true); + retryCountRef.current = 0; + setError(false); + toast.success('Connection restored'); clearInterval(interval); } }, 5); clearTimeout(timeoutId); - console.log('[DEBUG] opened'); + console.debug(new Date(), 'ws:connected'); } if (data.type === 'error') { toast.error(data.data); @@ -230,24 +250,62 @@ const useSocket = ( ws.onerror = () => { clearTimeout(timeoutId); - setError(true); + setIsWSReady(false); toast.error('WebSocket connection error.'); }; ws.onclose = () => { clearTimeout(timeoutId); - setError(true); - console.log('[DEBUG] closed'); + setIsWSReady(false); + console.debug(new Date(), 'ws:disconnected'); + if (!isCleaningUpRef.current) { + toast.error('Connection lost. Attempting to reconnect...'); + attemptReconnect(); + } }; - setWs(ws); - }; + } catch (error) { + console.debug(new Date(), 'ws:error', error); + attemptReconnect(); + } + }; - connectWs(); - } - }, [ws, url, setIsWSReady, setError]); + const attemptReconnect = () => { + retryCountRef.current += 1; + if (retryCountRef.current > MAX_RETRIES) { + console.debug(new Date(), 'ws:max_retries'); + setError(true); + toast.error('Unable to connect to server after multiple attempts. Please refresh the page to try again.'); + return; + } - return ws; + const backoffDelay = getBackoffDelay(retryCountRef.current); + console.debug(new Date(), `ws:retry attempt=${retryCountRef.current}/${MAX_RETRIES} delay=${backoffDelay}ms`); + + if (reconnectTimeoutRef.current) { + clearTimeout(reconnectTimeoutRef.current); + } + + reconnectTimeoutRef.current = setTimeout(() => { + connectWs(); + }, backoffDelay); + }; + + connectWs(); + + return () => { + isCleaningUpRef.current = true; + if (reconnectTimeoutRef.current) { + clearTimeout(reconnectTimeoutRef.current); + } + if (wsRef.current?.readyState === WebSocket.OPEN) { + wsRef.current.close(); + } + console.debug(new Date(), 'ws:cleanup'); + }; + }, [url, setIsWSReady, setError]); + + return wsRef.current; }; const loadMessages = async ( @@ -291,7 +349,7 @@ const loadMessages = async ( return [msg.role, msg.content]; }) as [string, string][]; - console.log('[DEBUG] messages loaded'); + console.debug(new Date(), 'app:messages_loaded'); document.title = messages[0].content; @@ -373,7 +431,7 @@ const ChatWindow = ({ id }: { id?: string }) => { return () => { if (ws?.readyState === 1) { ws.close(); - console.log('[DEBUG] closed'); + console.debug(new Date(), 'ws:cleanup'); } }; // eslint-disable-next-line react-hooks/exhaustive-deps @@ -388,12 +446,16 @@ const ChatWindow = ({ id }: { id?: string }) => { useEffect(() => { if (isMessagesLoaded && isWSReady) { setIsReady(true); - console.log('[DEBUG] ready'); + console.debug(new Date(), 'app:ready'); } }, [isMessagesLoaded, isWSReady]); const sendMessage = async (message: string, messageId?: string) => { if (loading) return; + if (!ws || ws.readyState !== WebSocket.OPEN) { + toast.error('Cannot send message while disconnected'); + return; + } setLoading(true); setMessageAppeared(false); @@ -404,7 +466,7 @@ const ChatWindow = ({ id }: { id?: string }) => { messageId = messageId ?? crypto.randomBytes(7).toString('hex'); - ws?.send( + ws.send( JSON.stringify({ type: 'message', message: { @@ -558,7 +620,7 @@ const ChatWindow = ({ id }: { id?: string }) => { return isReady ? ( notFound ? ( - <Error statusCode={404} /> + <NextError statusCode={404} /> ) : ( <div> {messages.length > 0 ? ( From 0ec54fe6c05270dcf03bfc3cc01b07c19b4bd41a Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Tue, 7 Jan 2025 11:43:54 +0530 Subject: [PATCH 107/115] feat(chat-window): remove toast --- ui/components/ChatWindow.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index 3968d92..b6f1b30 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -236,7 +236,6 @@ const useSocket = ( setIsWSReady(true); retryCountRef.current = 0; setError(false); - toast.success('Connection restored'); clearInterval(interval); } }, 5); From b7f7d25f549fc213b6dc63f17ea9204e41ba9806 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Tue, 7 Jan 2025 11:44:19 +0530 Subject: [PATCH 108/115] feat(chat-window): lint & beautify --- ui/components/ChatWindow.tsx | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index b6f1b30..ed3594c 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -73,7 +73,10 @@ const useSocket = ( }, }, ).then(async (res) => { - if (!res.ok) throw new Error(`Failed to fetch models: ${res.status} ${res.statusText}`); + if (!res.ok) + throw new Error( + `Failed to fetch models: ${res.status} ${res.statusText}`, + ); return res.json(); }); @@ -262,7 +265,6 @@ const useSocket = ( attemptReconnect(); } }; - } catch (error) { console.debug(new Date(), 'ws:error', error); attemptReconnect(); @@ -274,12 +276,17 @@ const useSocket = ( if (retryCountRef.current > MAX_RETRIES) { console.debug(new Date(), 'ws:max_retries'); setError(true); - toast.error('Unable to connect to server after multiple attempts. Please refresh the page to try again.'); + toast.error( + 'Unable to connect to server after multiple attempts. Please refresh the page to try again.', + ); return; } const backoffDelay = getBackoffDelay(retryCountRef.current); - console.debug(new Date(), `ws:retry attempt=${retryCountRef.current}/${MAX_RETRIES} delay=${backoffDelay}ms`); + console.debug( + new Date(), + `ws:retry attempt=${retryCountRef.current}/${MAX_RETRIES} delay=${backoffDelay}ms`, + ); if (reconnectTimeoutRef.current) { clearTimeout(reconnectTimeoutRef.current); From 99cae076a79f993ba8da5f91d0166f06d67b1ad1 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Tue, 7 Jan 2025 11:49:40 +0530 Subject: [PATCH 109/115] feat(chat-window): display toast when retried --- ui/components/ChatWindow.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index ed3594c..a44c550 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -237,8 +237,11 @@ const useSocket = ( const interval = setInterval(() => { if (ws.readyState === 1) { setIsWSReady(true); - retryCountRef.current = 0; setError(false); + if (retryCountRef.current > 0) { + toast.success('Connection restored.'); + } + retryCountRef.current = 0; clearInterval(interval); } }, 5); From 6d9d71279072112243ca45a887830ba2666000e8 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Tue, 7 Jan 2025 12:26:38 +0530 Subject: [PATCH 110/115] feat(chat-window): correctly handle server side WS closure --- ui/components/ChatWindow.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index a44c550..ac15b37 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -270,12 +270,14 @@ const useSocket = ( }; } catch (error) { console.debug(new Date(), 'ws:error', error); + setIsWSReady(false); attemptReconnect(); } }; const attemptReconnect = () => { retryCountRef.current += 1; + if (retryCountRef.current > MAX_RETRIES) { console.debug(new Date(), 'ws:max_retries'); setError(true); @@ -303,14 +305,14 @@ const useSocket = ( connectWs(); return () => { - isCleaningUpRef.current = true; if (reconnectTimeoutRef.current) { clearTimeout(reconnectTimeoutRef.current); } if (wsRef.current?.readyState === WebSocket.OPEN) { wsRef.current.close(); + isCleaningUpRef.current = true; + console.debug(new Date(), 'ws:cleanup'); } - console.debug(new Date(), 'ws:cleanup'); }; }, [url, setIsWSReady, setError]); @@ -456,6 +458,8 @@ const ChatWindow = ({ id }: { id?: string }) => { if (isMessagesLoaded && isWSReady) { setIsReady(true); console.debug(new Date(), 'app:ready'); + } else { + setIsReady(false); } }, [isMessagesLoaded, isWSReady]); From 2dc60d06e3ac1311480f48aef21691d380f84e19 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Sat, 11 Jan 2025 13:10:10 +0530 Subject: [PATCH 111/115] feat(chat-window): show settings during error on mobile --- ui/components/ChatWindow.tsx | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/ui/components/ChatWindow.tsx b/ui/components/ChatWindow.tsx index 62fa9dc..41a8f90 100644 --- a/ui/components/ChatWindow.tsx +++ b/ui/components/ChatWindow.tsx @@ -10,6 +10,8 @@ import { toast } from 'sonner'; import { useSearchParams } from 'next/navigation'; import { getSuggestions } from '@/lib/actions'; import Error from 'next/error'; +import { Settings } from 'lucide-react'; +import SettingsDialog from './SettingsDialog'; export type Message = { messageId: string; @@ -344,6 +346,8 @@ const ChatWindow = ({ id }: { id?: string }) => { const [notFound, setNotFound] = useState(false); + const [isSettingsOpen, setIsSettingsOpen] = useState(false); + useEffect(() => { if ( chatId && @@ -548,10 +552,19 @@ const ChatWindow = ({ id }: { id?: string }) => { if (hasError) { return ( - <div className="flex flex-col items-center justify-center min-h-screen"> - <p className="dark:text-white/70 text-black/70 text-sm"> - Failed to connect to the server. Please try again later. - </p> + <div className="relative"> + <div className="absolute w-full flex flex-row items-center justify-end mr-5 mt-5"> + <Settings + className="cursor-pointer lg:hidden" + onClick={() => setIsSettingsOpen(true)} + /> + </div> + <div className="flex flex-col items-center justify-center min-h-screen"> + <p className="dark:text-white/70 text-black/70 text-sm"> + Failed to connect to the server. Please try again later. + </p> + </div> + <SettingsDialog isOpen={isSettingsOpen} setIsOpen={setIsSettingsOpen} /> </div> ); } From 5c787bbb55fd71edc3d9d2b8889d8e274f5754b3 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Sat, 11 Jan 2025 13:10:23 +0530 Subject: [PATCH 112/115] feat(app): lint & beautify --- src/websocket/messageHandler.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/websocket/messageHandler.ts b/src/websocket/messageHandler.ts index 8817aae..395c0de 100644 --- a/src/websocket/messageHandler.ts +++ b/src/websocket/messageHandler.ts @@ -238,7 +238,12 @@ export const handleMessage = async ( } else { await db .delete(messagesSchema) - .where(and(gt(messagesSchema.id, messageExists.id), eq(messagesSchema.chatId, parsedMessage.chatId))) + .where( + and( + gt(messagesSchema.id, messageExists.id), + eq(messagesSchema.chatId, parsedMessage.chatId), + ), + ) .execute(); } } catch (err) { From f37686189e5fe2d74d3fbfa91c15ed35e8cadcab Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Fri, 31 Jan 2025 17:51:16 +0530 Subject: [PATCH 113/115] feat(output-parsers): add empty check --- src/lib/outputParsers/lineOutputParser.ts | 2 ++ src/lib/outputParsers/listLineOutputParser.ts | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lib/outputParsers/lineOutputParser.ts b/src/lib/outputParsers/lineOutputParser.ts index b50a20e..08711aa 100644 --- a/src/lib/outputParsers/lineOutputParser.ts +++ b/src/lib/outputParsers/lineOutputParser.ts @@ -19,6 +19,8 @@ class LineOutputParser extends BaseOutputParser<string> { lc_namespace = ['langchain', 'output_parsers', 'line_output_parser']; async parse(text: string): Promise<string> { + text = text.trim() || ''; + const regex = /^(\s*(-|\*|\d+\.\s|\d+\)\s|\u2022)\s*)+/; const startKeyIndex = text.indexOf(`<${this.key}>`); const endKeyIndex = text.indexOf(`</${this.key}>`); diff --git a/src/lib/outputParsers/listLineOutputParser.ts b/src/lib/outputParsers/listLineOutputParser.ts index fcd2f07..f465ef1 100644 --- a/src/lib/outputParsers/listLineOutputParser.ts +++ b/src/lib/outputParsers/listLineOutputParser.ts @@ -19,11 +19,13 @@ class LineListOutputParser extends BaseOutputParser<string[]> { lc_namespace = ['langchain', 'output_parsers', 'line_list_output_parser']; async parse(text: string): Promise<string[]> { + text = text.trim() || ''; + const regex = /^(\s*(-|\*|\d+\.\s|\d+\)\s|\u2022)\s*)+/; const startKeyIndex = text.indexOf(`<${this.key}>`); const endKeyIndex = text.indexOf(`</${this.key}>`); - if (startKeyIndex === -1 && endKeyIndex === -1) { + if (startKeyIndex === -1 || endKeyIndex === -1) { return []; } From 46541e6c0c79615eab36b363ac25865e41694967 Mon Sep 17 00:00:00 2001 From: ItzCrazyKns <95534749+ItzCrazyKns@users.noreply.github.com> Date: Sun, 2 Feb 2025 14:31:18 +0530 Subject: [PATCH 114/115] feat(package): update `markdown-to-jsx` version --- ui/package.json | 2 +- ui/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ui/package.json b/ui/package.json index bdda684..a8826dc 100644 --- a/ui/package.json +++ b/ui/package.json @@ -18,7 +18,7 @@ "clsx": "^2.1.0", "langchain": "^0.1.30", "lucide-react": "^0.363.0", - "markdown-to-jsx": "^7.6.2", + "markdown-to-jsx": "^7.7.2", "next": "14.1.4", "next-themes": "^0.3.0", "react": "^18", diff --git a/ui/yarn.lock b/ui/yarn.lock index 0798ca9..7eb109f 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -2210,10 +2210,10 @@ lucide-react@^0.363.0: resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.363.0.tgz#2bb1f9d09b830dda86f5118fcd097f87247fe0e3" integrity sha512-AlsfPCsXQyQx7wwsIgzcKOL9LwC498LIMAo+c0Es5PkHJa33xwmYAkkSoKoJWWWSYQEStqu58/jT4tL2gi32uQ== -markdown-to-jsx@^7.6.2: - version "7.6.2" - resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.6.2.tgz#254cbf7d412a37073486c0a2dd52266d2191a793" - integrity sha512-gEcyiJXzBxmId2Y/kydLbD6KRNccDiUy/Src1cFGn3s2X0LZZ/hUiEc2VisFyA5kUE3SXclTCczjQiAuqKZiFQ== +markdown-to-jsx@^7.7.2: + version "7.7.2" + resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.7.2.tgz#59c1dd64f48b53719311ab140be3cd51cdabccd3" + integrity sha512-N3AKfYRvxNscvcIH6HDnDKILp4S8UWbebp+s92Y8SwIq0CuSbLW4Jgmrbjku3CWKjTQO0OyIMS6AhzqrwjEa3g== md5@^2.3.0: version "2.3.0" From 358269505492fd8b154b1dee9693e546d53fc623 Mon Sep 17 00:00:00 2001 From: data5650 <79806567+data5650@users.noreply.github.com> Date: Wed, 5 Feb 2025 00:47:34 +0100 Subject: [PATCH 115/115] feat: add Gemini 2.0 Flash Exp models # Description Added two new Gemini models: - gemini-2.0-flash-exp - gemini-2.0-flash-thinking-exp-01-21 # Changes Made - Updated src/lib/providers/gemini.ts to include new models - Maintained consistent configuration with existing models # Testing - Tested locally using Docker - Verified models appear in UI and are selectable - Confirmed functionality with sample queries # Additional Notes These models expand the available options for users who want to use the latest Gemini capabilities. --- src/lib/providers/gemini.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/lib/providers/gemini.ts b/src/lib/providers/gemini.ts index 95764cf..d20c9b8 100644 --- a/src/lib/providers/gemini.ts +++ b/src/lib/providers/gemini.ts @@ -36,6 +36,22 @@ export const loadGeminiChatModels = async () => { apiKey: geminiApiKey, }), }, + 'gemini-2.0-flash-exp': { + displayName: 'Gemini 2.0 Flash Exp', + model: new ChatGoogleGenerativeAI({ + modelName: 'gemini-2.0-flash-exp', + temperature: 0.7, + apiKey: geminiApiKey, + }), + }, + 'gemini-2.0-flash-thinking-exp-01-21': { + displayName: 'Gemini 2.0 Flash Thinking Exp 01-21', + model: new ChatGoogleGenerativeAI({ + modelName: 'gemini-2.0-flash-thinking-exp-01-21', + temperature: 0.7, + apiKey: geminiApiKey, + }), + }, }; return chatModels;