AI prompts
base on Uses the power of OpenAI's GPT large language AI models to generate translations for your application. # Instant18n Gem for Rails
Use OpenAI's GPT large-language model to power internationalization of the text in your Rails application. Extracted from real-world usage in [MagmaChat](https://github.com/magma-labs/magma-chat).
## Installation
Install the gem and add to the application's Gemfile by executing:
$ bundle add instant18n
If bundler is not being used to manage dependencies, install the gem by executing:
$ gem install instant18n
Make sure to set `OPENAI_ACCESS_TOKEN` in your environment so that the library is able to access GPT.
## Usage
Invoke with `I18n.it` or simply `it` in your view templates. (Method is short for _instant translation_). Use in place of the standard `t` method for translating text.
The `it` method provides translation using the GPT-3 language model and caching the results to improve performance.
```
>> I18n.it('Hello world!', 'español')
=> Hola mundo!
```
This will attempt to translate the text "Hello world!" to Spanish using the GPT-3 language model. If the translation is successful, the translated text will be returned. If the translation fails, the original text (or GPT error) will be returned.
### Options
`I18n.it(text, lang, opts)`
The `it` method accepts the following parameters:
- key (required): The key associated with the text to be translated.
- lang (required): The language to translate the text to. Defaults to the default language set in the I18n module.
- class: if you pass in css classes with the `class` option, the method will return the translation wrapped in a `div` tag, instead of plain text.
Additional options that affect caching:
- force: force a cache miss
- expires_in: (seconds) how long to cache the translation
Additional options that are passed to the GPT-3 API:
- model: defaults to gpt-3.5-turbo
- temperature: defaults to 0.25
- max_tokens: defaults to 64
- top_p: defaults to 0.1
- frequency_penalty: defaults to 0
- presence_penalty: defaults to 0
Full description of these options is available [here](https://platform.openai.com/docs/api-reference/chat/create).
### View Helper
`it(text, opts)`
This gem mixes in an `it` helper method into `ActionView::Base`. For convenience, the helper method assumes the presence of a `current_user` object with a `preferred_language` attribute. If `current_user` is nil, it will use the value of `I18n.default_language` instead.
### Default Language
The default language is set to `English`. For performance and practical reasons, if you pass in the default language, GPT is not invoked. Change the default language in an initializer or at runtime by changing the value of the `default_language` property on the `I18n` module.
```
I18n.default_language = "Spanish"
```
### Anything Goes
Because GPT is smart and can translate into almost anything that resembles a language, all of the following options are known to work:
* Español
* Baby Talk
* Baseldeutsch
* Braille
* Ebonics
* Emoji
* Esperanto
* Gregg Shorthand
* हिन्दी
* 日本語
* Klingon
* 1337 Speak (Leetspeak)
* 한국어
* 中文
* Newspeak
* Morse Code
* Rhyming Cockney Slang
* Sindarin
* Singlish
* Spanglish
* العربية
* Trumpisms
* Türkçe
* Uwu
The limit is your imagination!
## Development
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
## Testing
The I18n Extensions gem can be tested using the RSpec testing framework. The tests are located in the spec directory and can be run using the following command:
```
bundle exec rspec
```
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/obie/instant18n. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/obie/instant18n/blob/main/CODE_OF_CONDUCT.md).
## License
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
## Code of Conduct
Everyone interacting in the Instant18n project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/obie/instant18n/blob/main/CODE_OF_CONDUCT.md).
## Acknowledgments
The I18n Extensions gem uses the GPT-3 language model API provided by OpenAI.
", Assign "at most 3 tags" to the expected json: {"id":"9009","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"