{"id":15168557,"url":"https://github.com/antononcube/raku-llm-functions","last_synced_at":"2025-08-02T22:13:44.805Z","repository":{"id":182325468,"uuid":"667880730","full_name":"antononcube/Raku-LLM-Functions","owner":"antononcube","description":"Raku package for functions and function objects to access, interact, and utilize LLMs.","archived":false,"fork":false,"pushed_at":"2025-06-08T03:17:24.000Z","size":581,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-08T04:34:26.358Z","etag":null,"topics":["chatgpt","functional-programming","large-language-models","llm","openai","palm-api","raku","web-api","webapi"],"latest_commit_sha":null,"homepage":"https://raku.land/zef:antononcube/LLM::Functions","language":"Raku","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"artistic-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/antononcube.png","metadata":{"files":{"readme":"README-work.md","changelog":"Changes","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-07-18T14:06:11.000Z","updated_at":"2025-06-08T03:17:28.000Z","dependencies_parsed_at":"2024-01-14T12:17:29.218Z","dependency_job_id":"72438286-e1fc-4977-aeae-a880e788db28","html_url":"https://github.com/antononcube/Raku-LLM-Functions","commit_stats":{"total_commits":268,"total_committers":1,"mean_commits":268.0,"dds":0.0,"last_synced_commit":"0c0af581294e24e5e2c1ca4983eb0c15b3c720a3"},"previous_names":["antononcube/raku-llm-functions"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/antononcube/Raku-LLM-Functions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antononcube%2FRaku-LLM-Functions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antononcube%2FRaku-LLM-Functions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antononcube%2FRaku-LLM-Functions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antononcube%2FRaku-LLM-Functions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/antononcube","download_url":"https://codeload.github.com/antononcube/Raku-LLM-Functions/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antononcube%2FRaku-LLM-Functions/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263061406,"owners_count":23407606,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chatgpt","functional-programming","large-language-models","llm","openai","palm-api","raku","web-api","webapi"],"created_at":"2024-09-27T06:22:34.543Z","updated_at":"2025-07-02T02:07:00.255Z","avatar_url":"https://github.com/antononcube.png","language":"Raku","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LLM::Functions \n\n[![MacOS](https://github.com/antononcube/Raku-LLM-Functions/actions/workflows/macos.yml/badge.svg)](https://github.com/antononcube/Raku-LLM-Functions/actions/workflows/macos.yml)\n[![Linux](https://github.com/antononcube/Raku-LLM-Functions/actions/workflows/linux.yml/badge.svg)](https://github.com/antononcube/Raku-LLM-Functions/actions/workflows/linux.yml)\n[![Win64](https://github.com/antononcube/Raku-LLM-Functions/actions/workflows/windows.yml/badge.svg)](https://github.com/antononcube/Raku-LLM-Functions/actions/workflows/windows.yml)\n[![https://raku.land/zef:antononcube/LLM::Functions](https://raku.land/zef:antononcube/LLM::Functions/badges/version)](https://raku.land/zef:antononcube/LLM::Functions)\n\n## In brief\n\nThis Raku package provides functions and function objects to access, interact, and utilize \nLarge Language Models (LLMs), like \n[OpenAI](https://platform.openai.com), [OAI1],\n[PaLM](https://developers.generativeai.google/products/palm), [ZG1],\nand\n[MistralAI](https://docs.mistral.ai), [MAI1].\n\nFor more details how the concrete LLMs are accessed see the packages\n[\"WWW::OpenAI\"](https://raku.land/zef:antononcube/WWW::OpenAI), [AAp2],\n[\"WWW::PaLM\"](https://raku.land/zef:antononcube/WWW::PaLM), [AAp3],\n[\"WWW::MistralAI\"](https://raku.land/zef:antononcube/WWW::MistralAI), [AAp9], and\n[\"WWW::Gemini\"](https://raku.land/zef:antononcube/WWW::Gemini), [AAp11].\n\nThe LLM functions built by this package can have evaluators that use \"sub-parsers\" -- see \n[\"Text::SubParsers\"](https://raku.land/zef:antononcube/Text::SubParsers), [AAp4].\n\nThe primary motivation to have handy, configurable functions for utilizing LLMs\ncame from my work on the packages\n[\"ML::FindTextualAnswer\"](https://raku.land/zef:antononcube/ML::FindTextualAnswer), [AAp6], and\n[\"ML::NLPTemplateEngine\"](https://raku.land/zef:antononcube/ML::NLPTemplateEngine), [AAp7].\n\nA very similar system of functionalities is developed by Wolfram Research Inc.;\nsee the paclet\n[\"LLMFunctions\"](https://resources.wolframcloud.com/PacletRepository/resources/Wolfram/LLMFunctions/), [WRIp1].\n\nFor well curated and instructive examples of LLM prompts see the\n[Wolfram Prompt Repository](https://resources.wolframcloud.com/PromptRepository/).\nMany of those prompts (≈220) are available in Raku and Python --\nsee [\"LLM::Prompts\"](https://raku.land/zef:antononcube/LLM::Prompts), [AAp8], and\n[\"LLMPrompts\"](https://pypi.org/project/LLMPrompts/), [AAp10], respectively.\n\nThe article\n[\"Generating documents via templates and LLMs\"](https://rakuforprediction.wordpress.com/2023/07/11/generating-documents-via-templates-and-llms/), [AA1],\nshows an alternative way of streamlining LLMs usage. (Via Markdown, Org-mode, or Pod6 templates.)\n\n-----\n\n## Installation\n\nPackage installations from both sources use [zef installer](https://github.com/ugexe/zef)\n(which should be bundled with the \"standard\" Rakudo installation file.)\n\nTo install the package from [Zef ecosystem](https://raku.land/) use the shell command:\n\n```\nzef install LLM::Functions\n```\n\nTo install the package from the GitHub repository use the shell command:\n\n```\nzef install https://github.com/antononcube/Raku-LLM-Functions.git\n```\n\n------\n\n## Design\n\n\"Out of the box\"\n[\"LLM::Functions\"](https://raku.land/zef:antononcube/LLM::Functions) uses\n[\"WWW::OpenAI\"](https://raku.land/zef:antononcube/WWW::OpenAI), [AAp2],\n[\"WWW::PaLM\"](https://raku.land/zef:antononcube/WWW::PaLM), [AAp3], and\n[\"WWW::MistralAI\"](https://raku.land/zef:antononcube/WWW::MistralAI), [AAp9].\nOther LLM access packages can be utilized via appropriate LLM configurations.\n\nConfigurations:\n- Are instances of the class `LLM::Functions::Configuration`\n- Are used by instances of the class `LLM::Functions::Evaluator`\n- Can be converted to Hash objects (i.e. have a `.Hash` method)\n\nNew LLM functions are constructed with the function `llm-function`.\n\nThe function `llm-function`:\n\n- Has the option \"llm-evaluator\" that takes evaluators, configurations, or string shorthands as values\n- Returns anonymous functions (that access LLMs via evaluators/configurations.)\n- Gives result functions that can be applied to different types of arguments depending on the first argument\n- Can take a (sub-)parser argument for post-processing of LLM results\n- Takes as a first argument a prompt that can be a:\n    - String\n    - Function with positional arguments\n    - Function with named arguments\n\nHere is a sequence diagram that follows the steps of a typical creation procedure of \nLLM configuration- and evaluator objects, and the corresponding LLM-function that utilizes them:\n\n```mermaid\nsequenceDiagram\n  participant User\n  participant llmfunc as llm-function\n  participant llmconf as llm-configuration\n  participant LLMConf as LLM configuration\n  participant LLMEval as LLM evaluator\n  participant AnonFunc as Anonymous function\n  User -\u003e\u003e llmfunc: ・prompt\u003cbr\u003e・conf spec\n  llmfunc -\u003e\u003e llmconf: conf spec\n  llmconf -\u003e\u003e LLMConf: conf spec\n  LLMConf -\u003e\u003e LLMEval: wrap with\n  LLMEval -\u003e\u003e llmfunc: evaluator object\n  llmfunc -\u003e\u003e AnonFunc:  create with:\u003cbr\u003e・evaluator object\u003cbr\u003e・prompt\n  AnonFunc -\u003e\u003e llmfunc: handle\n  llmfunc -\u003e\u003e User: handle\n```\n\nHere is a sequence diagram for making a LLM configuration with a global (engineered) prompt,\nand using that configuration to generate a chat message response:\n\n```mermaid\nsequenceDiagram\n  participant WWWOpenAI as WWW::OpenAI\n  participant User\n  participant llmfunc as llm-function\n  participant llmconf as llm-configuration\n  participant LLMConf as LLM configuration\n  participant LLMChatEval as LLM chat evaluator\n  participant AnonFunc as Anonymous function\n  User -\u003e\u003e llmconf: engineered prompt\n  llmconf -\u003e\u003e User: configuration object\n  User -\u003e\u003e llmfunc: ・prompt\u003cbr\u003e・configuration object\n  llmfunc -\u003e\u003e LLMChatEval: configuration object\n  LLMChatEval -\u003e\u003e llmfunc: evaluator object\n  llmfunc -\u003e\u003e AnonFunc: create with:\u003cbr\u003e・evaluator object\u003cbr\u003e・prompt\n  AnonFunc -\u003e\u003e llmfunc: handle\n  llmfunc -\u003e\u003e User: handle\n  User -\u003e\u003e AnonFunc: invoke with\u003cbr\u003emessage argument\n  AnonFunc -\u003e\u003e WWWOpenAI: ・engineered prompt\u003cbr\u003e・message\n  WWWOpenAI -\u003e\u003e User: LLM response \n```\n\n------\n\n## Configurations\n\n### OpenAI-based\n\nHere is the default, OpenAI-based configuration:\n\n```perl6\nuse LLM::Functions;\n.raku.say for llm-configuration('OpenAI').Hash;\n```\n\nHere is the ChatGPT-based configuration:\n\n```perl6\n.say for llm-configuration('ChatGPT').Hash;\n```\n\n**Remark:** `llm-configuration(Whatever)` is equivalent to `llm-configuration('OpenAI')`.\n\n**Remark:** Both the \"OpenAI\" and \"ChatGPT\" configuration use functions of the package \"WWW::OpenAI\", [AAp2].\nThe \"OpenAI\" configuration is for text-completions;\nthe \"ChatGPT\" configuration is for chat-completions. \n\n### PaLM-based\n\nHere is the default PaLM configuration:\n\n```perl6\n.say for llm-configuration('PaLM').Hash;\n```\n\n-----\n\n## Basic usage of LLM functions\n\n### Textual prompts\n\nHere we make a LLM function with a simple (short, textual) prompt:\n\n```perl6\nmy \u0026func = llm-function('Show a recipe for:');\n```\n\nHere we evaluate over a message: \n\n```perl6\nsay \u0026func('greek salad');\n```\n\n### Positional arguments\n\nHere we make a LLM function with a function-prompt and numeric interpreter of the result:\n\n```perl6\nmy \u0026func2 = llm-function(\n        {\"How many $^a can fit inside one $^b?\"},\n        form =\u003e Numeric,\n        llm-evaluator =\u003e 'palm');\n```\n\nHere were we apply the function:\n\n```perl6\nmy $res2 = \u0026func2(\"tennis balls\", \"toyota corolla 2010\");\n```\n\nHere we show that we got a number:\n\n```perl6\n$res2 ~~ Numeric\n```\n\n\n### Named arguments\n\nHere the first argument is a template with two named arguments: \n\n```perl6\nmy \u0026func3 = llm-function(-\u003e :$dish, :$cuisine {\"Give a recipe for $dish in the $cuisine cuisine.\"}, llm-evaluator =\u003e 'palm');\n```\n\nHere is an invocation:\n\n```perl6\n\u0026func3(dish =\u003e 'salad', cuisine =\u003e 'Russian', max-tokens =\u003e 300);\n```\n\n--------\n\n## LLM example functions\n\nThe function `llm-example-function` can be given a training set of examples in order \nto generating results according to the \"laws\" implied by that training set.  \n\nHere a LLM is asked to produce a generalization:\n\n```perl6\nllm-example-function([ 'finger' =\u003e 'hand', 'hand' =\u003e 'arm' ])('foot')\n```\n\nHere is an array of training pairs is used:\n\n```perl6\n'Oppenheimer' ==\u003e ([\"Einstein\" =\u003e \"14 March 1879\", \"Pauli\" =\u003e \"April 25, 1900\"] ==\u003e llm-example-function)()\n```\n\nHere is defined a LLM function for translating WL associations into Python dictionaries:\n\n```perl6\nmy \u0026fea = llm-example-function( '\u003c| A-\u003e3, 4-\u003eK1 |\u003e' =\u003e '{ A:3, 4:K1 }');\n\u0026fea('\u003c| 23-\u003e3, G-\u003e33, T -\u003e R5|\u003e');\n```\n\nThe function `llm-example-function` takes as a first argument:\n- Single `Pair` object of two scalars\n- Single `Pair` object of two `Positional` objects with the same length\n- A `Hash`\n- A `Positional` object of pairs\n\n**Remark:** The function `llm-example-function` is implemented with `llm-function` and suitable prompt.\n\nHere is an example of using hints:\n\n```perl6\nmy \u0026fec = llm-example-function(\n        [\"crocodile\" =\u003e \"grasshopper\", \"fox\" =\u003e \"cardinal\"],\n        hint =\u003e 'animal colors');\n\nsay \u0026fec('raccoon');\n```\n\n--------\n\n## Using predefined prompts\n\nUsing predefined prompts of the package [\"LLM::Prompts\"](https://raku.land/zef:antononcube/LLM::Prompts), [AAp8],\ncan be very convenient in certain (many) cases.\n\nHere is an example using \"Fixed That For You\" synthesis:\n\n```perl6\nuse LLM::Prompts;\n\nllm-synthesize([llm-prompt('FTFY'), 'Wha is ther population?'])\n```\n\n--------\n\n## Using chat-global prompts\n\nThe configuration objects can be given prompts that influence the LLM responses \n\"globally\" throughout the whole chat. (See the second sequence diagram above.)\n\nFor detailed examples see the documents:\n\n- [\"Using engineered prompts\"](./docs/Using-engineered-prompts_woven.md)\n- [\"Expand tests into documentation examples\"](./docs/Expand-tests-into-doc-examples_woven.md)\n\n--------\n\n## Chat objects\n\nHere we create chat object that uses OpenAI's ChatGPT:\n\n```perl6\nmy $prompt = 'You are a gem expert and you give concise answers.';\nmy $chat = llm-chat(chat-id =\u003e 'gem-expert-talk', conf =\u003e 'ChatGPT', :$prompt);\n```\n\n```perl6\n$chat.eval('What is the most transparent gem?');\n```\n\n```perl6\n$chat.eval('Ok. What are the second and third most transparent gems?');\n```\n\nHere are the prompt(s) and all messages of the chat object:\n\n```perl6\n$chat.say\n```\n\n--------\n\n## AI-vision functions\n\nConsider [this image](https://raw.githubusercontent.com/antononcube/MathematicaForPrediction/master/MarkdownDocuments/Diagrams/AI-vision-via-WL/0iyello2xfyfo.png):\n\n![](https://raw.githubusercontent.com/antononcube/MathematicaForPrediction/master/MarkdownDocuments/Diagrams/AI-vision-via-WL/0iyello2xfyfo.png)\n\nHere we import the image (as a Base64 string):\n\n```perl6\nuse Image::Markup::Utilities;\nmy $url = 'https://raw.githubusercontent.com/antononcube/MathematicaForPrediction/master/MarkdownDocuments/Diagrams/AI-vision-via-WL/0iyello2xfyfo.png';\nmy $img = image-import($url);\n$img.substr(^100)\n```\n\nHere we apply OpenAI's AI vision model `gpt-4-vision-preview` (which is the default one) over the ***URL of the image***:\n\n```perl6\nllm-vision-synthesize('Describe the image.', $url);\n```\n\nHere we apply Gemini's AI vision model `gemini-pro-vision` over the image:\n\n```perl6\nllm-vision-synthesize('Describe the image.', $img, e =\u003e 'Gemini');\n```\n\n**Remark:** Currently, Gemini works with (Base64) images only (and does not with URLs.) OpenAI's vision works with both URLs and images.\n\n\nThe function `llm-vision-function` uses the same evaluators (configurations, models) as `llm-vision-synthesize`.\n\n--------\n\n## Potential problems\n\nWith PaLM with certain wrong configuration we get the error:\n\n```\nerror =\u003e {code =\u003e 400, message =\u003e Messages must alternate between authors., status =\u003e INVALID_ARGUMENT}\n```\n\n--------\n\n## TODO\n\n- [X] DONE Resources\n  - See [\"LLM::Prompts\"](https://github.com/antononcube/Raku-LLM-Prompts)\n  - [X] DONE Gather prompts\n  - [X] DONE Process prompts into a suitable database\n    - Using JSON.\n- [ ] TODO Implementation\n  - [X] DONE Processing and array of prompts as a first argument\n  - [X] DONE Prompt class / object / record\n    - Again, see [\"LLM::Prompts\"](https://github.com/antononcube/Raku-LLM-Prompts)\n    - For retrieval and management of prompts.\n      - [X] DONE Prompts can be both plain strings or templates / functions.\n      - [X] DONE Each prompt has associated metadata:\n        - Type: persona, function, modifier\n        - Tool/parser\n        - Keywords\n        - Contributor?\n        - Topics: \"Advisor bot\", \"AI Guidance\", \"For Fun\", ...\n          - See: https://resources.wolframcloud.com/PromptRepository/\n    - [X] DONE Most likely, there would be a separate package \"LLM::Prompts\", [AAp8].\n  - [ ] MAYBE Random selection of LLM-evaluator\n    - Currently, the LLM-evaluator of the LLM-functions and LLM-chats is static, assigned at creation.\n    - This is easily implemented at \"top-level.\" \n  - [X] DONE Chat class / object\n    - For long conversations\n  - [X] DONE Include LLaMA \n    - Just using a different `:$base-url` for \"ChatGPT\" for the configurations.\n  - [X] DONE Include Gemini\n    - [X] DONE Separate configuration\n    - [X] DONE Its own evaluator class\n  - [X] DONE LLM example function\n    - [X] DONE First version with the signatures:\n      - [X] `@pairs`\n      - [X] `@input =\u003e @output`\n      - [X] Hint option\n    - [X] DONE Verify works with OpenAI \n    - [X] DONE Verify works with PaLM\n    - [X] DONE Verify works with Gemini\n  - [X] DONE Interpreter argument for `llm-function`\n    - See the `formatron` attribute of `LLM::Functions::Evaluator`.\n  - [X] DONE Adding `form` option to chat objects evaluator\n  - [X] DONE Implement `llm-embedding` function\n    - Generic, universal function for accessing the embeddings of different providers/models. \n- [ ] TODO CLI\n  - [ ] TODO Based on Chat objects\n  - [ ] TODO Storage and retrieval of chats\n  - [ ] TODO Has as parameters all attributes of the LLM-configuration objects.\n- [ ] TODO Documentation  \n  - [ ] TODO Detailed parameters description\n    - [ ] TODO Configuration\n    - [ ] TODO Evaluator\n    - [ ] TODO Chat\n  - [X] DONE Using engineered prompts\n  - [X] DONE Expand tests in documentation examples\n  - [X] DONE Conversion of a test file tests into Gherkin specs\n  - [X] DONE Number game programming\n    - [X] DONE Man vs Machine\n    - [X] DONE Machine vs Machine\n  - [X] DONE Using retrieved prompts\n  - [ ] TODO Longer conversations / chats\n\n--------\n\n## References\n\n### Articles\n\n[AA1] Anton Antonov,\n[\"Generating documents via templates and LLMs\"](https://rakuforprediction.wordpress.com/2023/07/11/generating-documents-via-templates-and-llms/),\n(2023),\n[RakuForPrediction at WordPress](https://rakuforprediction.wordpress.com).\n\n[ZG1] Zoubin Ghahramani,\n[\"Introducing PaLM 2\"](https://blog.google/technology/ai/google-palm-2-ai-large-language-model/),\n(2023),\n[Google Official Blog on AI](https://blog.google/technology/ai/).\n\n### Repositories, sites\n\n[MAI1] MistralAI team, [MistralAI platform](https://docs.mistral.ai).\n\n[OAI1] OpenAI team, [OpenAI platform](https://platform.openai.com/).\n\n[WRIr1] Wolfram Research, Inc.\n[Wolfram Prompt Repository](https://resources.wolframcloud.com/PromptRepository/).\n\n### Packages, paclets\n\n[AAp1] Anton Antonov,\n[LLM::Functions Raku package](https://github.com/antononcube/Raku-LLM-Functions),\n(2023),\n[GitHub/antononcube](https://github.com/antononcube).\n\n[AAp2] Anton Antonov,\n[WWW::OpenAI Raku package](https://github.com/antononcube/Raku-WWW-OpenAI),\n(2023),\n[GitHub/antononcube](https://github.com/antononcube).\n\n[AAp3] Anton Antonov,\n[WWW::PaLM Raku package](https://github.com/antononcube/Raku-WWW-PaLM),\n(2023),\n[GitHub/antononcube](https://github.com/antononcube).\n\n[AAp4] Anton Antonov,\n[Text::SubParsers Raku package](https://github.com/antononcube/Raku-Text-SubParsers),\n(2023),\n[GitHub/antononcube](https://github.com/antononcube).\n\n[AAp5] Anton Antonov,\n[Text::CodeProcessing Raku package](https://github.com/antononcube/Raku-Text-CodeProcessing),\n(2021),\n[GitHub/antononcube](https://github.com/antononcube).\n\n[AAp6] Anton Antonov,\n[ML::FindTextualAnswer Raku package](https://github.com/antononcube/Raku-ML-FindTextualAnswer),\n(2023),\n[GitHub/antononcube](https://github.com/antononcube).\n\n[AAp7] Anton Antonov,\n[ML::NLPTemplateEngine Raku package](https://github.com/antononcube/Raku-ML-NLPTemplateEngine),\n(2023),\n[GitHub/antononcube](https://github.com/antononcube).\n\n[AAp8] Anton Antonov,\n[LLM::Prompts Raku package](https://github.com/antononcube/Raku-LLM-Prompts),\n(2023),\n[GitHub/antononcube](https://github.com/antononcube).\n\n[AAp9] Anton Antonov,\n[WWW::MistralAI Raku package](https://github.com/antononcube/Raku-WWW-MistralAI),\n(2023),\n[GitHub/antononcube](https://github.com/antononcube).\n\n[AAp10] Anton Antonov,\n[LLMPrompts Python package](https://pypi.org/project/LLMPrompts/),\n(2023),\n[PyPI.org/antononcube](https://pypi.org/user/antononcube/).\n\n[AAp11] Anton Antonov,\n[WWW::Gemini Raku package](https://github.com/antononcube/Raku-WWW-Gemini),\n(2024),\n[GitHub/antononcube](https://github.com/antononcube).\n\n[WRIp1] Wolfram Research, Inc.\n[LLMFunctions paclet](https://resources.wolframcloud.com/PacletRepository/resources/Wolfram/LLMFunctions/),\n(2023),\n[Wolfram Language Paclet Repository](https://resources.wolframcloud.com/PacletRepository/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantononcube%2Fraku-llm-functions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fantononcube%2Fraku-llm-functions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantononcube%2Fraku-llm-functions/lists"}