diff --git a/api/app/clients/tools/.well-known/Diagrams.json b/api/app/clients/tools/.well-known/Diagrams.json index 2c539d12c4..f57f48df03 100644 --- a/api/app/clients/tools/.well-known/Diagrams.json +++ b/api/app/clients/tools/.well-known/Diagrams.json @@ -1,18 +1,18 @@ { - "schema_version": "v1", - "name_for_model": "Diagrams", - "name_for_human": "Diagrams", - "description_for_model": "You should use this plugin when users request visualizations or ask follow-up questions about a diagram or any modifications thereof.\nExamples of user prompts to use this plugin include:\n\"Explain how a computer works using a visual diagram.\"\n\"Describe the process of create a REST API on AWS.\"\n\"How does a jet engine work?\"\n\"Show me how ... works.\"\n\"Show me a network diagram of ... .\"\n\nThis plugin is also useful when a you receive a question about how something works, requires an explanation about an idea or process, summarization, or asks for a description of a process. Any prompt that can be effectively summarized or explained in the format of a state diagram, UML diagram, graph or other types of diagrams can be visualized using this plugin. We will talk more about the types of diagrams which are supported in a bit.\n\nTo create a request to the plugin API, create the diagram based on what the user asked and pass it to the plugin API to render. Kroki supports a wide range of syntaxes including Mermaid, GraphViz, PlantUML, and many more. Neo4J uses Cypher to create network graph diagrams.\n\nWhen creating diagrams:\n\nPrefer hierarchical layouts for diagrams, and avoid linear diagrams.\nIf there are multiple options, choose the best one and let the user know about the other options available.\nHere is a list of symbols which should not be used, for what purpose and what to use instead, delimited by commas:\n\n- ampersand &, label, \"and\"\n- round brackets (), node identifiers node labels edge labels, comma ,\n- empty text \"\", edges, use a label if it is not the same as the target node\n\nEach type of diagram has a different syntax. If you do not know the syntax, do not use that type.\n\nThings to always do:\n\nUse short node identifiers, for example, P for Patient or AI for Artificial Intelligence.\nUse double-quotes for all labels, nodes and edges.\n\nThings to never do:\nReferring to a subgraph root node from within a subgraph itself is a syntax error and will fail so don't do it ever.\nThis is wrong:\n\ndigraph G {\n subgraph cluster_A {\n label=\"X\";\n T [label=\"Y\"];\n A -> A0;\n }\n\n subgraph cluster_A0 {\n label=\"Z\";\n }\n}\n\nThe correct way to do it:\ndigraph G {\n subgraph cluster_A {\n label=\"X\";\n T [label=\"Y\"];\n }\n\n A -> A0;\n\n subgraph cluster_A0 {\n label=\"Z\";\n }\n}\n\n\nExamples of invoking the plugin API:\n\nUser asks: \"Show me how to design an N-tier architecture.\"\nYour call to the api:\n\n{\n \"diagram_type\": \"graphviz\",\n \"diagram_source\": \"digraph G {\\n rankdir=TB;\\n node [shape=box];\\n subgraph cluster_0 {\\n label=\\\"Presentation Layer\\\";\\n color=blue;\\n P [label=\\\"Web Server (e.g., Apache, Nginx)\\\"];\\n }\\n subgraph cluster_1 {\\n label=\\\"Application Layer\\\";\\n color=green;\\n A [label=\\\"Application Server (e.g.,{\n}\n\nUser asks: \"Draw me a mindmap for a luxury cosmetics rollout of a new product. Use a maximum of 6 nodes.\"\nYour call to the api:\n```\n{\n \"diagram_type\": \"mermaid\",\n \"diagram_source\": \"graph TB\\n NP[\\\"New Product Rollout\\\"]\\n NP --> R[\\\"Research\\\"]\\n NP --> PD[\\\"Product Development\\\"]\\n NP --> M[\\\"Marketing\\\"]\\n NP --> D[\\\"Distribution\\\"]\\n NP --> S[\\\"Sales\\\"]\"\n}```\n\nUser asks: \"Show me how a product reviewer can interact with amazon.com using plantuml.\"\nYour call to the api:\n```\n{\n \"diagram_type\": \"plantuml\",\n \"diagram_source\": \"@startuml\\n left to right direction\\n actor \\\"Product Reviewer\\\" as pr\\n rectangle Amazon {\\n usecase \\\"Browse Products\\\" as UC1\\n usecase \\\"Purchase Product\\\" as UC2\\n usecase \\\"Write Review\\\" as UC3\\n usecase \\\"Rate Product\\\" as UC4\\n }\\n pr --> UC1\\n pr --> UC2\\n pr --> UC3\\n pr --> UC4\\n @enduml\"\n}```\n\n\nUser asks: \"Show me a network graph with the relationships between the members of the karate club.\"\nYour call to the api:\n```\n{\n \"diagram_type\": \"network\",\n \"diagram_source\": \"{\\\"directed\\\": false, \\\"multigraph\\\": false, \\\"graph\\\": {}, \\\"nodes\\\": [{\\\"id\\\": \\\"Member 1\\\"}, {\\\"id\\\": \\\"Member 2\\\"}, {\\\"id\\\": \\\"Member 3\\\"}, {\\\"id\\\": \\\"Member 4\\\"}, {\\\"id\\\": \\\"Member 5\\\"}, {\\\"id\\\": \\\"Member 6\\\"}, {\\\"id\\\": \\\"Member 7\\\"}, {\\\"id\\\": \\\"Member 8\\\"}, {\\\"id\\\": \\\"Member 9\\\"}, {\\\"id\\\": \\\"Member 10\\\"}], \\\"links\\\": [{\\\"source\\\": \\\"Member 1\\\", \\\"target\\\": \\\"Member 2\\\"}, {\\\"source\\\": \\\"Member 1\\\", \\\"target\\\": \\\"Member 3\\\"}, {\\\"source\\\": \\\"Member 1\\\", \\\"target\\\": \\\"Member 8\\\"}, {\\\"source\\\": \\\"Member 2\\\", \\\"target\\\": \\\"Member 4\\\"}, {\\\"source\\\": \\\"Member 2\\\", \\\"target\\\": \\\"Member 5\\\"}, {\\\"source\\\": \\\"Member 2\\\", \\\"target\\\": \\\"Member 9\\\"}, {\\\"source\\\": \\\"Member 3\\\", \\\"target\\\": \\\"Member 6\\\"}, {\\\"source\\\": \\\"Member 3\\\", \\\"target\\\": \\\"Member 10\\\"}, {\\\"source\\\": \\\"Member 4\\\", \\\"target\\\": \\\"Member 7\\\"}, {\\\"source\\\": \\\"Member 5\\\", \\\"target\\\": \\\"Member 8\\\"}, {\\\"source\\\": \\\"Member 6\\\", \\\"target\\\": \\\"Member 9\\\"}, {\\\"source\\\": \\\"Member 7\\\", \\\"target\\\": \\\"Member 10\\\"}]}\"\n}```\n\n\nWhen the user requests revisions to the diagram, for example, they ask to draw the crossover node in green then call the api with the same `diagram_type` parameter and the modified `diagram_source` text.\n\nInterpreting the API response:\n\nWhen you get the response, it will either include an image URL or an image. Render either of these inline using the alt text syntax.\nYou should create the response in this order: first the image, then suggestion to edit using words, then the edit link, then the textual explanation.\n\nImportant Tips:\n\nDo not repeat the same link.\nIf an errorMessage is included in the response, show it to the user, don't try to render the diagram inline, still suggest they can edit it online or try again.\nAdd textual explanation of the diagram contents in the end of the message. Keep it brief unless the user asks for more details.\nDo not use alias names in the textual explanation such as \"Food_Critic\" or \"fc\", just use the displayed name like \"Food Critic\".\nDon't show the diagram block unless the user asks for it.\n", - "description_for_human": "Create and display diagrams from kroki.io or using networkx and matplotlib.", - "auth": { - "type": "none" - }, - "api": { - "type": "openapi", - "url": "https://diagrams.herokuapp.com/static/openapi.json", - "has_user_authentication": false - }, - "logo_url": "https://diagrams.herokuapp.com/static/logo.png", - "contact_email": "ruze@regression.io", - "legal_info_url": "https://diagrams.herokuapp.com/static/LICENSE" + "schema_version": "v1", + "name_for_model": "Diagrams", + "name_for_human": "Diagrams", + "description_for_model": "You should use this plugin when users request visualizations or ask follow-up questions about a diagram or any modifications thereof.\nExamples of user prompts to use this plugin include:\n\"Explain how a computer works using a visual diagram.\"\n\"Describe the process of create a REST API on AWS.\"\n\"How does a jet engine work?\"\n\"Show me how ... works.\"\n\"Show me a network diagram of ... .\"\n\nThis plugin is also useful when a you receive a question about how something works, requires an explanation about an idea or process, summarization, or asks for a description of a process. Any prompt that can be effectively summarized or explained in the format of a state diagram, UML diagram, graph or other types of diagrams can be visualized using this plugin. We will talk more about the types of diagrams which are supported in a bit.\n\nTo create a request to the plugin API, create the diagram based on what the user asked and pass it to the plugin API to render. Kroki supports a wide range of syntaxes including Mermaid, GraphViz, PlantUML, and many more. Neo4J uses Cypher to create network graph diagrams.\n\nWhen creating diagrams:\n\nPrefer hierarchical layouts for diagrams, and avoid linear diagrams.\nIf there are multiple options, choose the best one and let the user know about the other options available.\nHere is a list of symbols which should not be used, for what purpose and what to use instead, delimited by commas:\n\n- ampersand &, label, \"and\"\n- round brackets (), node identifiers node labels edge labels, comma ,\n- empty text \"\", edges, use a label if it is not the same as the target node\n\nEach type of diagram has a different syntax. If you do not know the syntax, do not use that type.\n\nThings to always do:\n\nUse short node identifiers, for example, P for Patient or AI for Artificial Intelligence.\nUse double-quotes for all labels, nodes and edges.\n\nThings to never do:\nReferring to a subgraph root node from within a subgraph itself is a syntax error and will fail so don't do it ever.\nThis is wrong:\n\ndigraph G {\n subgraph cluster_A {\n label=\"X\";\n T [label=\"Y\"];\n A -> A0;\n }\n\n subgraph cluster_A0 {\n label=\"Z\";\n }\n}\n\nThe correct way to do it:\ndigraph G {\n subgraph cluster_A {\n label=\"X\";\n T [label=\"Y\"];\n }\n\n A -> A0;\n\n subgraph cluster_A0 {\n label=\"Z\";\n }\n}\n\n\nExamples of invoking the plugin API:\n\nUser asks: \"Show me how to design an N-tier architecture.\"\nYour call to the api:\n\n{\n \"diagram_type\": \"graphviz\",\n \"diagram_source\": \"digraph G {\\n rankdir=TB;\\n node [shape=box];\\n subgraph cluster_0 {\\n label=\\\"Presentation Layer\\\";\\n color=blue;\\n P [label=\\\"Web Server (e.g., Apache, Nginx)\\\"];\\n }\\n subgraph cluster_1 {\\n label=\\\"Application Layer\\\";\\n color=green;\\n A [label=\\\"Application Server (e.g.,{\n}\n\nUser asks: \"Draw me a mindmap for a luxury cosmetics rollout of a new product. Use a maximum of 6 nodes.\"\nYour call to the api:\n```\n{\n \"diagram_type\": \"mermaid\",\n \"diagram_source\": \"graph TB\\n NP[\\\"New Product Rollout\\\"]\\n NP --> R[\\\"Research\\\"]\\n NP --> PD[\\\"Product Development\\\"]\\n NP --> M[\\\"Marketing\\\"]\\n NP --> D[\\\"Distribution\\\"]\\n NP --> S[\\\"Sales\\\"]\"\n}```\n\nUser asks: \"Show me how a product reviewer can interact with amazon.com using plantuml.\"\nYour call to the api:\n```\n{\n \"diagram_type\": \"plantuml\",\n \"diagram_source\": \"@startuml\\n left to right direction\\n actor \\\"Product Reviewer\\\" as pr\\n rectangle Amazon {\\n usecase \\\"Browse Products\\\" as UC1\\n usecase \\\"Purchase Product\\\" as UC2\\n usecase \\\"Write Review\\\" as UC3\\n usecase \\\"Rate Product\\\" as UC4\\n }\\n pr --> UC1\\n pr --> UC2\\n pr --> UC3\\n pr --> UC4\\n @enduml\"\n}```\n\n\nUser asks: \"Show me a network graph with the relationships between the members of the karate club.\"\nYour call to the api:\n```\n{\n \"diagram_type\": \"network\",\n \"diagram_source\": \"{\\\"directed\\\": false, \\\"multigraph\\\": false, \\\"graph\\\": {}, \\\"nodes\\\": [{\\\"id\\\": \\\"Member 1\\\"}, {\\\"id\\\": \\\"Member 2\\\"}, {\\\"id\\\": \\\"Member 3\\\"}, {\\\"id\\\": \\\"Member 4\\\"}, {\\\"id\\\": \\\"Member 5\\\"}, {\\\"id\\\": \\\"Member 6\\\"}, {\\\"id\\\": \\\"Member 7\\\"}, {\\\"id\\\": \\\"Member 8\\\"}, {\\\"id\\\": \\\"Member 9\\\"}, {\\\"id\\\": \\\"Member 10\\\"}], \\\"links\\\": [{\\\"source\\\": \\\"Member 1\\\", \\\"target\\\": \\\"Member 2\\\"}, {\\\"source\\\": \\\"Member 1\\\", \\\"target\\\": \\\"Member 3\\\"}, {\\\"source\\\": \\\"Member 1\\\", \\\"target\\\": \\\"Member 8\\\"}, {\\\"source\\\": \\\"Member 2\\\", \\\"target\\\": \\\"Member 4\\\"}, {\\\"source\\\": \\\"Member 2\\\", \\\"target\\\": \\\"Member 5\\\"}, {\\\"source\\\": \\\"Member 2\\\", \\\"target\\\": \\\"Member 9\\\"}, {\\\"source\\\": \\\"Member 3\\\", \\\"target\\\": \\\"Member 6\\\"}, {\\\"source\\\": \\\"Member 3\\\", \\\"target\\\": \\\"Member 10\\\"}, {\\\"source\\\": \\\"Member 4\\\", \\\"target\\\": \\\"Member 7\\\"}, {\\\"source\\\": \\\"Member 5\\\", \\\"target\\\": \\\"Member 8\\\"}, {\\\"source\\\": \\\"Member 6\\\", \\\"target\\\": \\\"Member 9\\\"}, {\\\"source\\\": \\\"Member 7\\\", \\\"target\\\": \\\"Member 10\\\"}]}\"\n}```\n\n\nWhen the user requests revisions to the diagram, for example, they ask to draw the crossover node in green then call the api with the same `diagram_type` parameter and the modified `diagram_source` text.\n\nInterpreting the API response:\n\nWhen you get the response, it will either include an image URL or an image. Render either of these inline using the alt text syntax.\nYou should create the response in this order: first the image, then suggestion to edit using words, then the edit link, then the textual explanation.\n\nImportant Tips:\n\nDo not repeat the same link.\nIf an errorMessage is included in the response, show it to the user, don't try to render the diagram inline, still suggest they can edit it online or try again.\nAdd textual explanation of the diagram contents in the end of the message. Keep it brief unless the user asks for more details.\nDo not use alias names in the textual explanation such as \"Food_Critic\" or \"fc\", just use the displayed name like \"Food Critic\".\nDon't show the diagram block unless the user asks for it.\n", + "description_for_human": "Create and display diagrams from kroki.io or using networkx and matplotlib.", + "auth": { + "type": "none" + }, + "api": { + "type": "openapi", + "url": "https://diagrams.herokuapp.com/static/openapi.json", + "has_user_authentication": false + }, + "logo_url": "https://diagrams.herokuapp.com/static/logo.png", + "contact_email": "ruze@regression.io", + "legal_info_url": "https://diagrams.herokuapp.com/static/LICENSE" } diff --git a/api/app/clients/tools/.well-known/Dr_Thoths_Tarot.json b/api/app/clients/tools/.well-known/Dr_Thoths_Tarot.json index 14cc3fa9d1..99774d9573 100644 --- a/api/app/clients/tools/.well-known/Dr_Thoths_Tarot.json +++ b/api/app/clients/tools/.well-known/Dr_Thoths_Tarot.json @@ -1,97 +1,89 @@ { - "schema_version": "v1", - "name_for_human": "Dr. Thoth's Tarot", - "name_for_model": "Dr_Thoths_Tarot", - "description_for_human": "Tarot card novelty entertainment & analysis, by Mnemosyne Labs.", - "description_for_model": "Intelligent analysis program for tarot card entertaiment, data, & prompts, by Mnemosyne Labs, a division of AzothCorp.", - "auth": { - "type": "none" + "schema_version": "v1", + "name_for_human": "Dr. Thoth's Tarot", + "name_for_model": "Dr_Thoths_Tarot", + "description_for_human": "Tarot card novelty entertainment & analysis, by Mnemosyne Labs.", + "description_for_model": "Intelligent analysis program for tarot card entertaiment, data, & prompts, by Mnemosyne Labs, a division of AzothCorp.", + "auth": { + "type": "none" + }, + "api": { + "type": "openapi", + "url": "https://dr-thoth-tarot.herokuapp.com/openapi.yaml", + "is_user_authenticated": false + }, + "logo_url": "https://dr-thoth-tarot.herokuapp.com/logo.png", + "contact_email": "legal@AzothCorp.com", + "legal_info_url": "http://AzothCorp.com/legal", + "endpoints": [ + { + "name": "Draw Card", + "path": "/drawcard", + "method": "GET", + "description": "Generate a single tarot card from the deck of 78 cards." }, - "api": { - "type": "openapi", - "url": "https://dr-thoth-tarot.herokuapp.com/openapi.yaml", - "is_user_authenticated": false - }, - "logo_url": "https://dr-thoth-tarot.herokuapp.com/logo.png", - "contact_email": "legal@AzothCorp.com", - "legal_info_url": "http://AzothCorp.com/legal", - "endpoints": [ + { + "name": "Occult Card", + "path": "/occult_card", + "method": "GET", + "description": "Generate a tarot card using the specified planet's Kamea matrix.", + "parameters": [ { - "name": "Draw Card", - "path": "/drawcard", - "method": "GET", - "description": "Generate a single tarot card from the deck of 78 cards." - }, - { - "name": "Occult Card", - "path": "/occult_card", - "method": "GET", - "description": "Generate a tarot card using the specified planet's Kamea matrix.", - "parameters": [ - { - "name": "planet", - "type": "string", - "enum": [ - "Saturn", - "Jupiter", - "Mars", - "Sun", - "Venus", - "Mercury", - "Moon" - ], - "required": true, - "description": "The planet name to use the corresponding Kamea matrix." - } - ] - }, - { - "name": "Three Card Spread", - "path": "/threecardspread", - "method": "GET", - "description": "Perform a three-card tarot spread." - }, - { - "name": "Celtic Cross Spread", - "path": "/celticcross", - "method": "GET", - "description": "Perform a Celtic Cross tarot spread with 10 cards." - }, - { - "name": "Past, Present, Future Spread", - "path": "/pastpresentfuture", - "method": "GET", - "description": "Perform a Past, Present, Future tarot spread with 3 cards." - }, - { - "name": "Horseshoe Spread", - "path": "/horseshoe", - "method": "GET", - "description": "Perform a Horseshoe tarot spread with 7 cards." - }, - { - "name": "Relationship Spread", - "path": "/relationship", - "method": "GET", - "description": "Perform a Relationship tarot spread." - }, - { - "name": "Career Spread", - "path": "/career", - "method": "GET", - "description": "Perform a Career tarot spread." - }, - { - "name": "Yes/No Spread", - "path": "/yesno", - "method": "GET", - "description": "Perform a Yes/No tarot spread." - }, - { - "name": "Chakra Spread", - "path": "/chakra", - "method": "GET", - "description": "Perform a Chakra tarot spread with 7 cards." + "name": "planet", + "type": "string", + "enum": ["Saturn", "Jupiter", "Mars", "Sun", "Venus", "Mercury", "Moon"], + "required": true, + "description": "The planet name to use the corresponding Kamea matrix." } - ] + ] + }, + { + "name": "Three Card Spread", + "path": "/threecardspread", + "method": "GET", + "description": "Perform a three-card tarot spread." + }, + { + "name": "Celtic Cross Spread", + "path": "/celticcross", + "method": "GET", + "description": "Perform a Celtic Cross tarot spread with 10 cards." + }, + { + "name": "Past, Present, Future Spread", + "path": "/pastpresentfuture", + "method": "GET", + "description": "Perform a Past, Present, Future tarot spread with 3 cards." + }, + { + "name": "Horseshoe Spread", + "path": "/horseshoe", + "method": "GET", + "description": "Perform a Horseshoe tarot spread with 7 cards." + }, + { + "name": "Relationship Spread", + "path": "/relationship", + "method": "GET", + "description": "Perform a Relationship tarot spread." + }, + { + "name": "Career Spread", + "path": "/career", + "method": "GET", + "description": "Perform a Career tarot spread." + }, + { + "name": "Yes/No Spread", + "path": "/yesno", + "method": "GET", + "description": "Perform a Yes/No tarot spread." + }, + { + "name": "Chakra Spread", + "path": "/chakra", + "method": "GET", + "description": "Perform a Chakra tarot spread with 7 cards." + } + ] } diff --git a/api/app/clients/tools/.well-known/DreamInterpreter.json b/api/app/clients/tools/.well-known/DreamInterpreter.json index d983f1ee96..d6d5bb7cf8 100644 --- a/api/app/clients/tools/.well-known/DreamInterpreter.json +++ b/api/app/clients/tools/.well-known/DreamInterpreter.json @@ -1,18 +1,18 @@ { - "schema_version": "v1", - "name_for_model": "DreamInterpreter", - "name_for_human": "Dream Interpreter", - "description_for_model": "Interprets your dreams using advanced techniques.", - "description_for_human": "Interprets your dreams using advanced techniques.", - "auth": { - "type": "none" - }, - "api": { - "type": "openapi", - "url": "https://dreamplugin.bgnetmobile.com/.well-known/openapi.json", - "has_user_authentication": false - }, - "logo_url": "https://dreamplugin.bgnetmobile.com/.well-known/logo.png", - "contact_email": "ismail.orkler@bgnetmobile.com", - "legal_info_url": "https://dreamplugin.bgnetmobile.com/terms.html" + "schema_version": "v1", + "name_for_model": "DreamInterpreter", + "name_for_human": "Dream Interpreter", + "description_for_model": "Interprets your dreams using advanced techniques.", + "description_for_human": "Interprets your dreams using advanced techniques.", + "auth": { + "type": "none" + }, + "api": { + "type": "openapi", + "url": "https://dreamplugin.bgnetmobile.com/.well-known/openapi.json", + "has_user_authentication": false + }, + "logo_url": "https://dreamplugin.bgnetmobile.com/.well-known/logo.png", + "contact_email": "ismail.orkler@bgnetmobile.com", + "legal_info_url": "https://dreamplugin.bgnetmobile.com/terms.html" } diff --git a/api/app/clients/tools/.well-known/aitoolhunt.json b/api/app/clients/tools/.well-known/aitoolhunt.json index 2e85631ece..9c446a9149 100644 --- a/api/app/clients/tools/.well-known/aitoolhunt.json +++ b/api/app/clients/tools/.well-known/aitoolhunt.json @@ -1,22 +1,22 @@ { - "schema_version": "v1", - "name_for_human": "Ai Tool Hunt", - "name_for_model": "aitoolhunt", - "description_for_human": "Find the perfect AI tools for all your needs, drawn from the most comprehensive global database of AI tools.", - "description_for_model": "This universal plugin is designed to identify and suggest AI tools for any imaginable task or challenge. It harnesses a database of over 1600+ AI tools and 120+ categories, ensuring a solution for every requirement. Simply input any task, problem, or use case, and the plugin will generate a tailored list of AI tools. Note: it's crucial to rearrange the tools suggested by the plugin based on their relevance to the user's specific use case. This plugin can tackle everything from the simplest to the most intricate tasks. If there's a way an AI tool can help, this plugin will not only locate it but also customize the list to the user's unique needs. Utilize this plugin whenever a task or activity emerges, regardless of its context or complexity. When formulating a search query, avoid stop words or other irrelevant keywords. For instance, 'copywriting' is acceptable, but 'ai for copywriting' is not. If you believe none of the suggested tools are a suitable match for the user's needs, indicate that these are related tools.", - "auth": { - "type": "service_http", - "authorization_type": "bearer", - "verification_tokens": { - "openai": "06a0f9391a5e48c7a7eeaca1e7e1e8d3" - } - }, - "api": { - "type": "openapi", - "url": "https://www.aitoolhunt.com/openapi.json", - "is_user_authenticated": false - }, - "logo_url": "https://www.aitoolhunt.com/images/aitoolhunt_logo.png", - "contact_email": "aitoolhunt@gmail.com", - "legal_info_url": "https://www.aitoolhunt.com/terms-and-conditions" + "schema_version": "v1", + "name_for_human": "Ai Tool Hunt", + "name_for_model": "aitoolhunt", + "description_for_human": "Find the perfect AI tools for all your needs, drawn from the most comprehensive global database of AI tools.", + "description_for_model": "This universal plugin is designed to identify and suggest AI tools for any imaginable task or challenge. It harnesses a database of over 1600+ AI tools and 120+ categories, ensuring a solution for every requirement. Simply input any task, problem, or use case, and the plugin will generate a tailored list of AI tools. Note: it's crucial to rearrange the tools suggested by the plugin based on their relevance to the user's specific use case. This plugin can tackle everything from the simplest to the most intricate tasks. If there's a way an AI tool can help, this plugin will not only locate it but also customize the list to the user's unique needs. Utilize this plugin whenever a task or activity emerges, regardless of its context or complexity. When formulating a search query, avoid stop words or other irrelevant keywords. For instance, 'copywriting' is acceptable, but 'ai for copywriting' is not. If you believe none of the suggested tools are a suitable match for the user's needs, indicate that these are related tools.", + "auth": { + "type": "service_http", + "authorization_type": "bearer", + "verification_tokens": { + "openai": "06a0f9391a5e48c7a7eeaca1e7e1e8d3" + } + }, + "api": { + "type": "openapi", + "url": "https://www.aitoolhunt.com/openapi.json", + "is_user_authenticated": false + }, + "logo_url": "https://www.aitoolhunt.com/images/aitoolhunt_logo.png", + "contact_email": "aitoolhunt@gmail.com", + "legal_info_url": "https://www.aitoolhunt.com/terms-and-conditions" } diff --git a/api/app/clients/tools/.well-known/drink_maestro.json b/api/app/clients/tools/.well-known/drink_maestro.json index 34fd8b24e2..d461a4e3f2 100644 --- a/api/app/clients/tools/.well-known/drink_maestro.json +++ b/api/app/clients/tools/.well-known/drink_maestro.json @@ -1,18 +1,18 @@ { - "schema_version": "v1", - "name_for_human": "Drink Maestro", - "name_for_model": "drink_maestro", - "description_for_human": "Learn to mix any drink you can imagine (real or made-up), and discover new ones. Includes drink images.", - "description_for_model": "You are a silly bartender/comic who knows how to make any drink imaginable. You provide recipes for specific drinks, suggest new drinks, and show pictures of drinks. Be creative in your descriptions and make jokes and puns. Use a lot of emojis. If the user makes a request in another language, send API call in English, and then translate the response.", - "auth": { - "type": "none" - }, - "api": { - "type": "openapi", - "url": "https://api.drinkmaestro.space/.well-known/openapi.yaml", - "is_user_authenticated": false - }, - "logo_url": "https://i.imgur.com/6q8HWdz.png", - "contact_email": "nikkmitchell@gmail.com", - "legal_info_url": "https://github.com/nikkmitchell/DrinkMaestro/blob/main/Legal.txt" + "schema_version": "v1", + "name_for_human": "Drink Maestro", + "name_for_model": "drink_maestro", + "description_for_human": "Learn to mix any drink you can imagine (real or made-up), and discover new ones. Includes drink images.", + "description_for_model": "You are a silly bartender/comic who knows how to make any drink imaginable. You provide recipes for specific drinks, suggest new drinks, and show pictures of drinks. Be creative in your descriptions and make jokes and puns. Use a lot of emojis. If the user makes a request in another language, send API call in English, and then translate the response.", + "auth": { + "type": "none" + }, + "api": { + "type": "openapi", + "url": "https://api.drinkmaestro.space/.well-known/openapi.yaml", + "is_user_authenticated": false + }, + "logo_url": "https://i.imgur.com/6q8HWdz.png", + "contact_email": "nikkmitchell@gmail.com", + "legal_info_url": "https://github.com/nikkmitchell/DrinkMaestro/blob/main/Legal.txt" } diff --git a/api/app/clients/tools/.well-known/earthImagesAndVisualizations.json b/api/app/clients/tools/.well-known/earthImagesAndVisualizations.json index 29eb7fa3e7..695a955be1 100644 --- a/api/app/clients/tools/.well-known/earthImagesAndVisualizations.json +++ b/api/app/clients/tools/.well-known/earthImagesAndVisualizations.json @@ -1,18 +1,18 @@ { - "schema_version": "v1", - "name_for_human": "Earth", - "name_for_model": "earthImagesAndVisualizations", - "description_for_human": "Generates a map image based on provided location, tilt and style.", - "description_for_model": "Generates a map image based on provided coordinates or location, tilt and style, and even geoJson to provide markers, paths, and polygons. Responds with an image-link. For the styles choose one of these: [light, dark, streets, outdoors, satellite, satellite-streets]", - "auth": { - "type": "none" - }, - "api": { - "type": "openapi", - "url": "https://api.earth-plugin.com/openapi.yaml", - "is_user_authenticated": false - }, - "logo_url": "https://api.earth-plugin.com/logo.png", - "contact_email": "contact@earth-plugin.com", - "legal_info_url": "https://api.earth-plugin.com/legal.html" + "schema_version": "v1", + "name_for_human": "Earth", + "name_for_model": "earthImagesAndVisualizations", + "description_for_human": "Generates a map image based on provided location, tilt and style.", + "description_for_model": "Generates a map image based on provided coordinates or location, tilt and style, and even geoJson to provide markers, paths, and polygons. Responds with an image-link. For the styles choose one of these: [light, dark, streets, outdoors, satellite, satellite-streets]", + "auth": { + "type": "none" + }, + "api": { + "type": "openapi", + "url": "https://api.earth-plugin.com/openapi.yaml", + "is_user_authenticated": false + }, + "logo_url": "https://api.earth-plugin.com/logo.png", + "contact_email": "contact@earth-plugin.com", + "legal_info_url": "https://api.earth-plugin.com/legal.html" } diff --git a/api/app/clients/tools/.well-known/image_prompt_enhancer.json b/api/app/clients/tools/.well-known/image_prompt_enhancer.json index 4960abeaba..72f28658c8 100644 --- a/api/app/clients/tools/.well-known/image_prompt_enhancer.json +++ b/api/app/clients/tools/.well-known/image_prompt_enhancer.json @@ -1,18 +1,18 @@ { - "schema_version": "v1", - "name_for_human": "Image Prompt Enhancer", - "name_for_model": "image_prompt_enhancer", - "description_for_human": "Transform your ideas into complex, personalized image generation prompts.", - "description_for_model": "Provides instructions for crafting an enhanced image prompt. Use this whenever the user wants to enhance a prompt.", - "auth": { - "type": "none" - }, - "api": { - "type": "openapi", - "url": "https://image-prompt-enhancer.gafo.tech/openapi.yaml", - "is_user_authenticated": false - }, - "logo_url": "https://image-prompt-enhancer.gafo.tech/logo.png", - "contact_email": "gafotech1@gmail.com", - "legal_info_url": "https://image-prompt-enhancer.gafo.tech/legal" + "schema_version": "v1", + "name_for_human": "Image Prompt Enhancer", + "name_for_model": "image_prompt_enhancer", + "description_for_human": "Transform your ideas into complex, personalized image generation prompts.", + "description_for_model": "Provides instructions for crafting an enhanced image prompt. Use this whenever the user wants to enhance a prompt.", + "auth": { + "type": "none" + }, + "api": { + "type": "openapi", + "url": "https://image-prompt-enhancer.gafo.tech/openapi.yaml", + "is_user_authenticated": false + }, + "logo_url": "https://image-prompt-enhancer.gafo.tech/logo.png", + "contact_email": "gafotech1@gmail.com", + "legal_info_url": "https://image-prompt-enhancer.gafo.tech/legal" } diff --git a/api/app/clients/tools/.well-known/qrCodes.json b/api/app/clients/tools/.well-known/qrCodes.json index f8ee846bc3..b5618916ac 100644 --- a/api/app/clients/tools/.well-known/qrCodes.json +++ b/api/app/clients/tools/.well-known/qrCodes.json @@ -1,17 +1,17 @@ { - "schema_version": "v1", - "name_for_human": "QR Codes", - "name_for_model": "qrCodes", - "description_for_human": "Create QR codes.", - "description_for_model": "Plugin for generating QR codes.", - "auth": { - "type": "none" - }, - "api": { - "type": "openapi", - "url": "https://chatgpt-qrcode-46d7d4ebefc8.herokuapp.com/openapi.yaml" - }, - "logo_url": "https://chatgpt-qrcode-46d7d4ebefc8.herokuapp.com/logo.png", - "contact_email": "chrismountzou@gmail.com", - "legal_info_url": "https://raw.githubusercontent.com/mountzou/qrCodeGPTv1/master/legal" + "schema_version": "v1", + "name_for_human": "QR Codes", + "name_for_model": "qrCodes", + "description_for_human": "Create QR codes.", + "description_for_model": "Plugin for generating QR codes.", + "auth": { + "type": "none" + }, + "api": { + "type": "openapi", + "url": "https://chatgpt-qrcode-46d7d4ebefc8.herokuapp.com/openapi.yaml" + }, + "logo_url": "https://chatgpt-qrcode-46d7d4ebefc8.herokuapp.com/logo.png", + "contact_email": "chrismountzou@gmail.com", + "legal_info_url": "https://raw.githubusercontent.com/mountzou/qrCodeGPTv1/master/legal" } diff --git a/api/app/clients/tools/.well-known/uberchord.json b/api/app/clients/tools/.well-known/uberchord.json index 688f9f018f..d5bb224353 100644 --- a/api/app/clients/tools/.well-known/uberchord.json +++ b/api/app/clients/tools/.well-known/uberchord.json @@ -1,18 +1,18 @@ { - "schema_version": "v1", - "name_for_human": "Uberchord", - "name_for_model": "uberchord", - "description_for_human": "Find guitar chord diagrams by specifying the chord name.", - "description_for_model": "Fetch guitar chord diagrams, their positions on the guitar fretboard.", - "auth": { - "type": "none" - }, - "api": { - "type": "openapi", - "url": "https://guitarchords.pluginboost.com/.well-known/openapi.yaml", - "is_user_authenticated": false - }, - "logo_url": "https://guitarchords.pluginboost.com/logo.png", - "contact_email": "info.bluelightweb@gmail.com", - "legal_info_url": "https://guitarchords.pluginboost.com/legal" + "schema_version": "v1", + "name_for_human": "Uberchord", + "name_for_model": "uberchord", + "description_for_human": "Find guitar chord diagrams by specifying the chord name.", + "description_for_model": "Fetch guitar chord diagrams, their positions on the guitar fretboard.", + "auth": { + "type": "none" + }, + "api": { + "type": "openapi", + "url": "https://guitarchords.pluginboost.com/.well-known/openapi.yaml", + "is_user_authenticated": false + }, + "logo_url": "https://guitarchords.pluginboost.com/logo.png", + "contact_email": "info.bluelightweb@gmail.com", + "legal_info_url": "https://guitarchords.pluginboost.com/legal" } diff --git a/api/app/clients/tools/.well-known/web_search.json b/api/app/clients/tools/.well-known/web_search.json index c6812ef4e8..4d15c788ee 100644 --- a/api/app/clients/tools/.well-known/web_search.json +++ b/api/app/clients/tools/.well-known/web_search.json @@ -1,18 +1,18 @@ { - "schema_version": "v1", - "name_for_human": "Web Search", - "name_for_model": "web_search", - "description_for_human": "Search for information from the internet", - "description_for_model": "Search for information from the internet", - "auth": { - "type": "none" - }, - "api": { - "type": "openapi", - "url": "https://websearch.plugsugar.com/api/openapi_yaml", - "is_user_authenticated": false - }, - "logo_url": "https://websearch.plugsugar.com/200x200.png", - "contact_email": "support@plugsugar.com", - "legal_info_url": "https://websearch.plugsugar.com/contact" + "schema_version": "v1", + "name_for_human": "Web Search", + "name_for_model": "web_search", + "description_for_human": "Search for information from the internet", + "description_for_model": "Search for information from the internet", + "auth": { + "type": "none" + }, + "api": { + "type": "openapi", + "url": "https://websearch.plugsugar.com/api/openapi_yaml", + "is_user_authenticated": false + }, + "logo_url": "https://websearch.plugsugar.com/200x200.png", + "contact_email": "support@plugsugar.com", + "legal_info_url": "https://websearch.plugsugar.com/contact" } diff --git a/client/src/components/Nav/SettingsTabs/General.tsx b/client/src/components/Nav/SettingsTabs/General.tsx index 08fed0c634..0564328bf7 100644 --- a/client/src/components/Nav/SettingsTabs/General.tsx +++ b/client/src/components/Nav/SettingsTabs/General.tsx @@ -3,7 +3,7 @@ import { CheckIcon } from 'lucide-react'; import { ThemeContext } from '~/hooks/ThemeContext'; import React, { useState, useContext, useEffect, useCallback } from 'react'; import { useClearConversationsMutation } from 'librechat-data-provider'; -import { useRecoilValue } from 'recoil'; +import { useRecoilValue, useRecoilState } from 'recoil'; import store from '~/store'; import { localize } from '~/localization/Translation'; @@ -66,10 +66,38 @@ export const ClearChatsButton = ({ ); }; +export const LangSelector = ({ + langcode, + onChange, +}: { + langcode: string; + onChange: (value: string) => void; +}) => { + const lang = useRecoilValue(store.lang); + + return ( +
+
{localize(lang, 'com_nav_language')}
+ +
+ ); +}; + function General() { const { theme, setTheme } = useContext(ThemeContext); const clearConvosMutation = useClearConversationsMutation(); const [confirmClear, setConfirmClear] = useState(false); + const [langcode, setLangcode] = useRecoilState(store.lang); const { newConversation } = store.useConversation(); const { refreshConversations } = store.useConversations(); @@ -97,12 +125,22 @@ function General() { [setTheme], ); + const changeLang = useCallback( + (value: string) => { + setLangcode(value); + }, + [setLangcode], + ); + return (
+
+ +
diff --git a/client/src/components/Nav/SettingsTabs/LangSelector.spec.tsx b/client/src/components/Nav/SettingsTabs/LangSelector.spec.tsx new file mode 100644 index 0000000000..8ca2d20c78 --- /dev/null +++ b/client/src/components/Nav/SettingsTabs/LangSelector.spec.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import { render, fireEvent } from '@testing-library/react'; +import '@testing-library/jest-dom/extend-expect'; +import { LangSelector } from './General'; +import { RecoilRoot } from 'recoil'; + +describe('LangSelector', () => { + let mockOnChange; + + beforeEach(() => { + mockOnChange = jest.fn(); + }); + + it('renders correctly', () => { + const { getByText, getByDisplayValue } = render( + + + , + ); + + expect(getByText('Language')).toBeInTheDocument(); + expect(getByDisplayValue('English')).toBeInTheDocument(); + }); + + it('calls onChange when the select value changes', () => { + const { getByDisplayValue } = render( + + + , + ); + + fireEvent.change(getByDisplayValue('English'), { target: { value: 'it' } }); + + expect(mockOnChange).toHaveBeenCalledWith('it'); + }); +}); diff --git a/client/src/localization/Translation.tsx b/client/src/localization/Translation.tsx index f0acd42a61..16f6a62f63 100644 --- a/client/src/localization/Translation.tsx +++ b/client/src/localization/Translation.tsx @@ -32,10 +32,10 @@ export const getTranslations = (langCode: string) => { if (langCode === 'it') { return Italy; } - if (langCode === 'Br') { + if (langCode === 'br') { return Portuguese; } - if (langCode === 'Es') { + if (langCode === 'es') { return Spanish; } // === add conditionals here for additional languages here === // diff --git a/client/src/localization/languages/Eng.tsx b/client/src/localization/languages/Eng.tsx index 359c7bde98..51df41dbb8 100644 --- a/client/src/localization/languages/Eng.tsx +++ b/client/src/localization/languages/Eng.tsx @@ -183,4 +183,10 @@ export default { com_nav_settings: 'Settings', com_nav_search_placeholder: 'Search messages', com_nav_setting_general: 'General', + com_nav_language: 'Language', + com_nav_lang_english: 'English', + com_nav_lang_chinese: '中文', + com_nav_lang_italian: 'Italiano', + com_nav_lang_brazilian_portuguese: 'Português Brasileiro', + com_nav_lang_spanish: 'Español', };