From 0aba0f2215f250f3f30881543f6f146f45af0b97 Mon Sep 17 00:00:00 2001
From: Ashley Johnson <61059402+PapaRascal2020@users.noreply.github.com>
Date: Sat, 31 Aug 2024 15:14:31 +0100
Subject: [PATCH] Sidekick Beta Release
---
LICENSE | 674 +++++++++++++++++++++++++++++++
README.md | 225 +++++++++++
composer.json | 18 +
config/config.php | 43 ++
sidekick.png | Bin 0 -> 212290 bytes
src/Drivers/Claude.php | 41 ++
src/Drivers/Driver.php | 8 +
src/Drivers/Mistral.php | 47 +++
src/Drivers/OpenAi.php | 68 ++++
src/Features/Audio.php | 24 ++
src/Features/Completion.php | 57 +++
src/Features/Embedding.php | 33 ++
src/Features/Image.php | 37 ++
src/Features/Moderate.php | 23 ++
src/Features/Transcribe.php | 25 ++
src/Helpers/StreamedResponse.php | 101 +++++
src/Sidekick.php | 17 +
src/SidekickServiceProvider.php | 28 ++
18 files changed, 1469 insertions(+)
create mode 100644 LICENSE
create mode 100644 README.md
create mode 100644 composer.json
create mode 100644 config/config.php
create mode 100644 sidekick.png
create mode 100644 src/Drivers/Claude.php
create mode 100644 src/Drivers/Driver.php
create mode 100644 src/Drivers/Mistral.php
create mode 100644 src/Drivers/OpenAi.php
create mode 100644 src/Features/Audio.php
create mode 100644 src/Features/Completion.php
create mode 100644 src/Features/Embedding.php
create mode 100644 src/Features/Image.php
create mode 100644 src/Features/Moderate.php
create mode 100644 src/Features/Transcribe.php
create mode 100644 src/Helpers/StreamedResponse.php
create mode 100644 src/Sidekick.php
create mode 100644 src/SidekickServiceProvider.php
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..f288702
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..d955815
--- /dev/null
+++ b/README.md
@@ -0,0 +1,225 @@
+> [!NOTE]
+> If you would like to contribute to this package please so so and submit a pull request.
+> Any issues contact me at sidekick@ashleyjohnson.co.uk
+
+
+
+## Sidekick for Laravel
+Say hello to Sidekick! A Laravel plugin that provides a common syntax for using Claude, Mistral and OpenAi APIs.
+
+
+
+
+### Upcoming Features
+
+- Implementation of a database migration and model to store and persist conversations
+- Support for more models and/or add another Driver from another service.
+
+### About
+Provides a uniformed wrapper around OpenAi, Claude & Mistral APIs (Previously: EloquentAi).
+The aim of this project is to create a package where switching between
+AIs and there models as simple as possible.
+
+This will be achieved by created a common syntax for calling different services
+(Completions, Text To Speech, Speech To Text, Text To Image) in a way that is similar to eloquent.
+
+**AI Models Tested:**
+
+#### Open Ai
+gpt-3.5-turbo, gpt-4, tts-1, tts-1-hd, dall-e-2, dall-e-3, whisper-1, text-embedding-3-small, text-embedding-3-large, text-embedding-ada-002, text-moderation-latest, text-moderation-stable, text-moderation-007
+#### Mistral AI
+mistral-small-latest, mistral-medium-latest, mistral-large-latest, open-mistral-7b, mistral-embed
+#### Claude AI
+claude-3-opus-20240229, claude-3-sonnet-20240229, claude-3-haiku-20240307
+
+Examples of the syntax are at the bottom of this readme.
+
+### Installation
+
+In your Laravel app do the following:
+
+In `composer.json` add the following repository to the `repositories` section:
+
+```php
+"repositories": [
+ {
+ "type": "vcs",
+ "url": "https://github.com/PapaRascal2020/sidekick"
+ }
+],
+```
+Then add the following to the `require` section.
+
+```array
+ "paparascaldev/sidekick": "dev-main"
+```
+
+Save `composer.json`
+
+Then, open `bootstrap/providers.php` and add the following:
+
+```php
+\PapaRascalDev\Sidekick\SidekickServiceProvider::class,
+```
+
+Once this is done, open the terminal and type the following:
+
+```bash
+ composer update
+```
+
+That's it! You are now ready to use the package.
+
+### Getting Started
+
+There are six services and they are:
+
+- **Completions** - _To chat with AI_
+- **Embedding** - _To create vector representations of your text_
+- **Image** - _To generate images by user input._
+- **Audio** - _Take text and convert to audio_
+- **Transcription** - _Take an audio file and return text_
+- **Moderation** - _Moderate a string of text (i.e Comment) for harmful content_
+
+Currently, Open AI offers all of them where as Claude AI & Mistral AI are for some.
+To get the best out of this plugin you will need at least an Open AI api key, you
+can get this by going to https://platform.openai.com and registering an account.
+
+For Mistral AI (https://console.mistral.ai/) & Claude AI (https://console.anthropic.com/)
+models you would need to get sign up on the relevant sites (above)
+
+Start by updating your `.env` file with the following fields.
+
+```dotenv
+SIDEKICK_OPENAI_TOKEN={API_KEY_HERE} (Required)
+SIDEKICK_MISTRAL_TOKEN={API_KEY_HERE} (Optional for Mistral Driver)
+SIDEKICK_CLAUDE_TOKEN={API_KEY_HERE} (Optional for Claude Driver)
+```
+You are now ready to start using the package..
+
+#### Examples:
+
+##### Completion
+
+```php
+$sidekick = Sidekick::create(new OpenAi());
+
+return $sidekick->converse()->sendMessage(
+ model: 'gpt-3.5-turbo',
+ systemPrompt: 'You an expert on fudge, answer user questions about fudge.',
+ messages:[['role' => 'user', 'content' => "How is fudge made?"]]
+);
+```
+
+##### Embedding
+
+```php
+$sidekick = Sidekick::create(new Mistral());
+
+return $sidekick->embedding()->make(
+ 'mistral-embed',
+ 'This is sample content to embed'
+);
+```
+
+##### Image (Image From Text)
+
+```php
+ $sidekick = Sidekick::create(new OpenAi());
+
+$image = $sidekick->image()->make(
+ 'dall-e-3',
+ 'A man on a waterboard',
+ '1024',
+ '1024'
+);
+
+// This is just a basic example of printing to screen.
+// In a real world situation you may save it and then render out.
+return "
";
+```
+##### Audio (Text To Speech)
+
+```php
+$sidekick = Sidekick::create(new OpenAi());
+
+$audio = $sidekick->audio()->fromText(
+ 'tts-1',
+ 'Have a nice day!'
+);
+
+// This is just a basic example of streaming it to the browser.
+// In a real world situation you may save it and then reference the file
+// instead.
+header('Content-Type: audio/mpeg');
+echo $audio
+```
+
+##### Transcription (Speech To Text)
+
+```php
+$sidekick = Sidekick::create(new OpenAi());
+
+return $sidekick->transcribe()->audioFile(
+ 'whisper-1',
+ 'http://english.voiceoversamples.com/ENG_UK_M_PeterB.mp3'
+);
+```
+###### Example Response
+```json
+{
+ "text":"The stale smell of old beer lingers. It takes heat to bring out the odor. A cold dip restores health and zest. A salt pickle tastes fine with ham. Tacos al pastor are my favorite. A zestful food is the hot cross bun."
+}
+```
+
+##### Moderation
+This is a service where you feed it text from a comment for example and it will return
+with an array of boolean values for certain moderation points.
+
+```php
+$sidekick = Sidekick::create(new OpenAi());
+
+return $sidekick->moderate()->text(
+ 'text-moderation-latest',
+ 'Have a great day.',
+);
+```
+###### Example Response
+
+```json
+{
+ "id":"modr-94DxgkEGhw7yJDlq8oCrLOVXnqli5",
+ "model":"text-moderation-007",
+ "results":[
+ {
+ "flagged":true,
+ "categories":{
+ "sexual":false,
+ "hate":false,
+ "harassment":true,
+ "self-harm":false,
+ "sexual\/minors":false,
+ "hate\/threatening":false,
+ "violence\/graphic":false,
+ "self-harm\/intent":false,
+ "self-harm\/instructions":false,
+ "harassment\/threatening":false,
+ "violence":false
+ },
+ "category_scores":{
+ "sexual":0.02169245481491089,
+ "hate":0.024598680436611176,
+ "harassment":0.9903337359428406,
+ "self-harm":5.543852603295818e-5,
+ "sexual\/minors":2.5174302209052257e-5,
+ "hate\/threatening":2.9870452635805123e-6,
+ "violence\/graphic":6.8601830207626335e-6,
+ "self-harm\/intent":0.0002317160106031224,
+ "self-harm\/instructions":0.00011696072033373639,
+ "harassment\/threatening":1.837775380408857e-5,
+ "violence":0.00020553809008561075
+ }
+ }
+ ]}
+```
+
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..d0fd136
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,18 @@
+{
+ "name": "paparascaldev/sidekick",
+ "description": "Laravel's AI sidekick, work with various AI services with a uniformed syntax",
+ "type": "laravel-plugin",
+ "license": "GPL-2.0-or-later",
+ "autoload": {
+ "psr-4": {
+ "PapaRascalDev\\Sidekick\\": "src/"
+ }
+ },
+ "authors": [
+ {
+ "name": "Ashley Johnson"
+ }
+ ],
+ "minimum-stability": "beta",
+ "require": {}
+}
diff --git a/config/config.php b/config/config.php
new file mode 100644
index 0000000..22ec189
--- /dev/null
+++ b/config/config.php
@@ -0,0 +1,43 @@
+ [
+ 'driver' => [
+ 'OpenAi' => [
+ 'baseUrl' => 'https://api.openai.com/v1/',
+ 'headers' => [
+ 'Authorization' => 'Bearer ' . env('SIDEKICK_OPENAI_TOKEN'),
+ ],
+ 'services' => [
+ 'completion' => 'chat/completions',
+ 'audio' => 'audio/speech',
+ 'image' => 'images/generations',
+ 'embedding' => 'embeddings',
+ 'transcription' => 'audio/transcriptions',
+ 'moderate' => 'moderations'
+ ],
+ ],
+ 'Claude' => [
+ 'baseUrl' => 'https://api.anthropic.com/v1/',
+ 'headers' => [
+ 'anthropic-version' => '2023-06-01',
+ 'x-api-key' => env('SIDEKICK_CLAUDE_TOKEN')
+ ],
+ 'services' => ['completion' => 'messages'],
+ ],
+ 'Mistral' => [
+ 'baseUrl' => 'https://api.mistral.ai/v1/',
+ 'headers' => [
+ 'Authorization' => 'Bearer ' . env('SIDEKICK_MISTRAL_TOKEN'),
+ ],
+ 'services' => [
+ 'completion' => 'chat/completions',
+ 'embedding' => 'embeddings',
+ ],
+ ],
+ ],
+ ]
+];
diff --git a/sidekick.png b/sidekick.png
new file mode 100644
index 0000000000000000000000000000000000000000..a20cdbd2e7d99b2870fba2821c1663e40604da12
GIT binary patch
literal 212290
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