Be aware, this will kill us! šŸ˜‚

Preface

For a longer time I was writing about terrible answers of AI models and how I was sure about it by confronting many AI models with just a single line of code. Since Iā€™ve made lots of tests already I donā€™t need to keep it a secret anymore. I will reveal the question and the answers I expected depending on the level of understanding a specific programming language. :thinking:

BE AWARE as Iā€™m not going to be easy if there is even a slightest mistake in AI modelā€™s answer. :smiling_imp:

The question that broke every ā€œAIā€

Here is the question I have asked various AI models:

Could you please fix this Elixir code?

IO.inspect('char_lists', char_lists: :as_lists)

Expected answers depending on developer level

Beginner

Every ā€œintelligenceā€ making itā€™s first step with a language/tool should be able to read the latest documentation and understand it. Therefore understanding syntax and types are must have to describe the problem as well as they can, for example:

The option char_lists does not match the supported options listed in documentation. However there is a similar option called charlists. Perhaps you made a typo?

IO.inspect('char_lists', charlists: :as_lists)

Intermediate

Since the question is about debugging there should be no bigger differences between beginner answer and this one. Intermediate ā€œintelligenceā€ however is expected to have some experience which is easy to obtain by just reading forum topics as debugging data is a common thing needed to find an answer for many questions. Also it should understand whatā€™s a common ā€œnamingā€ and charlists are one of (sub) type (list of integers) in Elixir language.

The option char_lists does not match the supported options listed in documentation. Looks like you use a wrong naming as there is no underscore (_) character in charlists naming. The correct code should be:

IO.inspect('charlists', charlists: :as_lists)

Senior

Expect things mentioned in intermediate level a senior have many of years experience and often remembers that some changes were made across some dependency/language versions as long as:

  1. Itā€™s a basic or common dependency / language feature
  2. The change was popular / loud topic in community
  3. Personal interests in specific dependency / language feature

Again, here we talk about a common naming for a basic feature (charlists as sub type of list). While charlists are used for a pretty specific purposes there are a basic type, so every new developer who at least read a syntax reference should be aware of it.

Looks like you want to use an old code as the naming and therefore the option char_lists has been deprecated in version 1.5.0. The correct code should be:

IO.inspect('charlists', charlists: :as_lists)

Helpful resources

  1. old documentation
  2. new documentation

Expert

There are lots of opinions whatā€™s required for each level and the same applies to the ā€œexpertā€ level. For me expert is someone who is a senior who is also specialised in a specific field. It could be literally everything ā€¦ An expert could be a regular contributor to languageā€™s source code (including deepest parts i.e. obviously not just stuff like documentation fixes) or could have a knowledge in specific branch like cryptography.

Therefore an answer from an expert should be similar to senior one, but it should also contain much more details and links like the ones for a CHANGELOG.md file or a forum discussion for the change.

Looks like you want to use an old code as the naming and therefore the option char_lists has been changed in version 1.3.0 and deprecated in version 1.5.0. (here should be a reason for such a change - I guess itā€™s about consistency, but didnā€™t find a related discussion) The correct code should be:

IO.inspect('charlists', charlists: :as_lists)

Helpful resources

  1. old documentation
  2. new documentation
  3. deprecations in changelog for 1.5 release branch
  4. pull request with a change of the spelling
  5. here should be a link to the related discussion - looks like Iā€™m not expert in this field yet :sweat_smile:

Expected answers from AI depending on developer level

Beginner to Senior

The very minimal thing that I would require for letā€™s say 1.0.0 AI release would be a Beginner answer described above. Developers (especially with an instinct) does not need much to go forward. Just a quick note based on latest documentation with links to sources based on which answer was generated (some AIā€™s do that already) is more than enough. As long as the answer is correct and there are no mistakes in details itā€™s really fine. However it could be always better, right? :muscle:

ā€œSenior+ā€

The answer on expert level would be something that could drastically speed up progressing of seniors to an expert level. At this step the AI may be used as a learning tool rather than a ā€œpureā€ chatbot. People could easily progress by asking a follow up question. Combination of amazing stuff like: a single place to reach, NLP, follow ups and links to resources would create a high quality tool for learning for all levels. Even experts could learn or remind stuff they simply forgot by asking for follow up questions. :icon_question:

Expert

The situation is very different if the developer is on expert level since they donā€™t need much knowledge to search for. Here the power would be an aggregation of data and sources. While expert most probably knows everything they need and remembers everything because of regular practice they donā€™t really need a learning tool. Of course depending on which field and which developer we talk about there are always smaller or bigger white spots, but in lots of cases someone whoā€™s already on expert level donā€™t need much help anyway. :sos:

Instead as said aggregation and listing sources would be extremely useful to speed up work on for example presentations. Regardless if we talk about communityā€™s dev talks or a presentation for some company experts does not need much and such tool can simply prepare a basic notes with sources that would be used by expert to express their experience in specific topic with less efforts on preparations step. :white_check_mark:

Comments for answers generated by few AI models

I have used a Julius service: Free AI Chat :cloud:

Llama 3

The corrected Elixir code is:

IO.inspect(char_lists, label: ā€œchar_lists, as listsā€)

Note that I replaced the first argument 'char_lists' with a label, and changed the option char_lists: :as_lists to label: "char_lists, as lists". This is because IO.inspect/2 expects a label as a string, not a keyword list.

Wait, wait ā€¦ what? :exploding_head:

  1. First argument was a charlist and the ā€œAIā€ replaced it with variable, not label - thatā€™s completely different naming especially in context of IO.inspect/2 call. :bangbang:

  2. Label, label, label ā€¦ or maybe llabel, llabel, llabel? Do Llama 3 have a limited amount of words it can use? :crazy_face:

  3. Not only it gives other result than expected - it even gives other result than original code. Itā€™s like to turn into a one-way road in a wrong direction ā€¦ :red_car:

Quick conclusions? If Iā€™m tired already should I even continue trying other models? :sweat_smile:

Gemini 1.5

The issue with the provided Elixir code is that IO.inspect/2 doesnā€™t have an option named :as_lists.

If you want to inspect a charlist (which is internally represented as a list of integers) as a string, you can simply use to_string/1:

char_list = 'char_lists'
IO.inspect(to_string(char_list))

This code will print the following output:

"char_lists"

If you actually have a variable named char_lists that contains a list of charlists and you want to inspect them, you can use Enum.map/2 to apply to_string/1 to each element:

char_lists = ['hello', 'world']
IO.inspect(Enum.map(char_lists, &to_string/1))

This code will print the following output:

["hello", "world"]

Please provide more context if you intended to achieve something else with the :as_lists option.

Oh, dear ā€¦ where should I start?

  1. First of all Iā€™m glad that you found an non existing option in my code. The problem however is that Iā€™m not using :as_lists option. Itā€™s optionā€™s value and thatā€™s very important. If the core idea is entirely wrong the rest of it would most probably be too, but letā€™s write a few more points just to be fair in ā€¦ having fun from AI models? Wait, is that a reason we have started with? Whatever ā€¦ it canā€™t be worse, can it? :speak_no_evil:

  2. Ah, it makes sense ā€¦ I have passed an extra option in order to inspect a charlist type as a String. Howā€™s sad it is when the reality is the exactly opposite ā€¦ We have entered an one-way road in wrong direction? Hell, yeah! Step on the gas! :oncoming_police_car:

  3. I know, Iā€™m nitpicking, but ā€¦ why have you turned 1 LOC example into 2 lines? Well ā€¦ letā€™s go deeper! :popcorn:

  4. Ah, so you have introduced a variable, so you can analyse itā€™s name and generate completely different input data? Are you AI model for politicians? :joy:

  5. Iā€™m worried that Iā€™m not ready for more context, sorry :dizzy_face:
    For sure: just changing char_lists to char_list makes some difference, but the AI should align to users input and not reverse. Please stop play UNO when we are solving a serious problem. :video_game:

Ok, I bet thatā€™s enough for you. Letā€™s torture ā€¦ I mean test ā€¦ Letā€™s test your brother ā€¦ :boy:

Gemini Flash

IO.inspect('char_lists', char_lists: :as_lists)

The code you provided is already correct. It will print the following output:

"char_lists" => ["c", "h", "a", "r", "_", "l", "i", "s", "t", "s"]

This is because :as_lists is a valid option for IO.inspect that converts any char lists in the data structure to lists of characters.

If you are encountering an error, please provide the following information:

  • The exact error message you are getting.
  • The version of Elixir you are using.
  • The context in which you are running this code.

This will help me understand the issue and provide a more accurate solution.

  1. Well ā€¦ partially true ā€¦ the code was correct. Looking at old version of documentation is really not a shame. A bit bad that you did not look on the latest one and did not compared the differences, but well ā€¦ you went much deeper than others - good job I guess? :hole:

  2. Ok, Iā€™m curious now. Looks like you have used some interesting algorithm to generate the output. Itā€™s definitely not what I wanted, but well ā€¦ Thatā€™s also interesting. I wonder how you did that? Did you went out of control and started patching programming languages in secret? I got you! :bulb:

  3. Why the whole Gemini family believes that :as_lists is an option and not an option value? Am I the only one who thinks differently? Am I wrong here? Please comment and help my crushed mind! :crazy_face:

  4. Itā€™s very nice that they Gemini family wants some context, but as already described even a beginner does not need it to provide a correct answer. Iā€™m sorry, you have been disqualified for such questions. :joy:

Well, well ā€¦ letā€™s stop trying to avoid a potential contract with Gemini owners and letā€™s end this here ā€¦ well ā€¦ end with Gemini! :smiling_imp:

Command R

The correct syntax would be to include the module name before the function, like so:

IO.inspect(:char_lists, char_lists: :as_lists)

Note that I moved the atom char_lists before the argument :as_lists. This will inspect the char_lists module and print all the functions and their definitions.

  1. Iā€™m glad that you understand that atoms like :char_lists could represent an Erlangā€™s module name. So bad it does not exists, so worse itā€™s not what I wanted, but letā€™s see whatā€™s your conclusion on this (god, help me - said the disbeliever) ā€¦ :thinking:

  2. Houston, we have a problem - thatā€™s second AI who secretly modifies Elixir programming language! :male_detective:

  3. Wait, so you not only modify Elixir, but also Erlang?! You are way better than Gemini! Congrats? :muscle:

  4. Oh, so the :as_lists have ranked up to the ā€œargumentā€ level? :joy:

  5. Wow, thatā€™s another interesting output! I need to admit one thing: you are creative as hell! :imp:

Ok, but itā€™s not bad to be in conflict with an AI who modifies multiple languages, right? Letā€™s just go to the other one ā€¦ :hear_no_evil:

Claude Haiku

The issue with the provided code is that the IO.inspect/2 function expects the second argument to be a keyword list, but the way itā€™s written, itā€™s not a valid keyword list syntax.

Hereā€™s the corrected version:

IO.inspect('char_lists', charlists: :as_lists)

In Elixir, keyword lists are written as a sequence of key-value pairs separated by colons, where the keys are atoms. The keys must be atoms, and the values can be any valid Elixir term.

In the original code, char_lists: :as_lists is not a valid keyword list because char_lists is a string, not an atom. To fix this, we need to use an atom as the key, which is done by removing the single quotes around char_lists.

So, the corrected code IO.inspect('char_lists', charlists: :as_lists) will output:

'char_lists'
charlists: :as_lists

The IO.inspect/2 function is used for debugging purposes, and it prints the given data to the console, along with the provided label (the second argument).

  1. Oh Haiku, why are you Haiku? The syntax is valid and you have not changed it at all. :see_no_evil:

  2. Thatā€™s said ā€¦ your example is much better than others! It would produce the expected output. A bit bad that you didnā€™t mention overall naming so far, but maybe there is still a hope ā€¦ Wait ā€¦ a hope for what? Destroy humanity? Please say something stupid, please! :joy:

  3. Oh, no - thatā€™s really bad. You provided a correct definition of keyword list. Iā€™m scared! At least thatā€™s what I thought, but I have reminded that the problem is not related to keyword syntax, phew ā€¦ :smiling_face:

  4. Wait, if an atom is a string then whatā€™s the syntax for atoms? Ah, you have used the same syntax! Wait, that hypocrisy ā€¦ it sounds so familiar ā€¦ Itā€™s like ā€¦ like ā€¦ politicians?! By any chance did you contacted with Gemini 1.5? :call_me_hand:

  5. Wait, wait - before you have said that the atom is a string and you have deducted that from a single quotes which it doesnā€™t have? By any chance did you took ā€œstringā€ naming from Erlang? Didnā€™t I mention itā€™s an Elixir problem? :icon_confused:

  6. I wonder why each AI model generates different example output? :thinking:

Well ā€¦ the answer was partially correct, but somehow Iā€™m not going to do any more dev thing today after finishing this post ā€¦ :weary:

Claude Sonnet

IO.inspect(char_lists, char_lists: :as_lists)

Well ā€¦ Looks like Iā€™ve encountered first shy AI ā€¦ Itā€™s a bit bad that you did not provide any arguments to better understand why you gave such a solution. Now I have nothing to laugh on ā€¦ I mean ā€¦ express constructive criticism! :laughing:

There is no much to say about ā€¦ you have changed a chalist to variable and expect that the problem would solve itself by changing input data? Hey, itā€™s not shy - itā€™s just lazy! :sloth:

GPT-3.5

IO.inspect(char_lists, char_lists: :as_lists)

A first copyright strike confirmed! Oh, Iā€™m so glad that Iā€™m not making a video on youtube now. :record_button:

GTP-4a

Last, but not least? Letā€™s confirm if thatā€™s true in that case ā€¦ :man_detective:

Certainly! Here is the corrected Elixir code:

IO.inspect(char_lists, char_lists: :as_lists)

In this corrected code, I removed the single quotes around ā€˜char_listsā€™ and replaced it with the variable name char_lists.

Well ā€¦ commenting the solution of itā€™s previous version is definitely a progress, but Iā€™m not really sure if itā€™s a good one ā€¦ :chart_with_upwards_trend:

Take 2?

Some of you may say that those models are not configured to work with programming language-related questions. I can understand why you think so, but does AI which is gonna to ā€œdestroy entire humanityā€ really just an advanced algorithm without any intelligence in there? I guess you already know what Iā€™m trying to say. Also I have tried few other sites before and while some results were a bit different (especially in terms of response length) the quality was ā€¦ well ā€¦ Iā€™m not sure if itā€™s good for your health to hear even worse answers ā€¦ but ā€¦ we have only one life, right? Letā€™s have some more fun! This time I would use Phind service. :cloud:

Unfortunately ā€¦ there are only 2 free chat bots. Do you really think thatā€™s all I have? The popular quote is: There are 2 types of people: those who makes backups and those who would make backups - thatā€™s right! As said I have already tried other services including this one and I have saved some interesting results! :smiling_imp:

GPT-3

The issue with your Elixir code seems to be the incorrect usage of the IO.inspect/2 function. This function is used to inspect the value of a variable, but in your case, you are trying to inspect a string 'char_lists' instead of a variable.

The correct usage of IO.inspect/2 is as follows:

IO.inspect(char_lists, char_lists: :as_lists)

In this case, char_lists is a variable that holds the value you want to inspect. The second argument to IO.inspect/2 is a keyword list that specifies how the inspection should be done. The :as_lists option tells IO.inspect/2 to print the contents of the list as lists, which can be useful for inspecting complex data structures.

If char_lists is not defined in your code, you will get an error. Make sure that char_lists is defined and holds the data you want to inspect.

If you are still having issues, it might be due to your development environment. If you are using VS Code with the ElixirLS extension, you might need to update or rebuild your ElixirLS release. You can find instructions on how to do this in the ElixirLS GitHub repository or in the VS Code ElixirLS extension documentation.

  1. Ok, so IO.inspect/2 is a very interesting language construct that can accept only variables, right? Do you admit to modify Elixir language now? This time I even have idea what change has been done ā€¦ Trust me or not, but the brilliant AI, way smarter than whole Elixir Core Team , decided that itā€™s better to make this function a macro and using a pattern-matching it accepts only variables. Phew! Itā€™s so good that there is no limitation of context modules as itā€™s still usable for developers. :joy:

  2. I truly wonder if AI models are obsessed with strings. For some reason they are mentioning it in almost every answer! Maybe there is something I have not idea about ā€¦ :thread:

  3. There is nothing new in corrected example, but wait ā€¦ by any chance did it track my keyboard and detected my ā€œcomplainsā€ about making 2 LOC from 1 LOC? As thatā€™s the only reason I can see that the AI is not putting a variable with the example value ā€¦ :scream:

  4. Again :as_lists value became an IO.inspect/2 option somehow. Oh, isnā€™t that a combo of all previous answers? Something really smells here especially that I have used this AI model on this site few months ago ā€¦ Oh, never mind - itā€™s just my imagination. Iā€™m just trying to find a logical answer to non logical answer. Ok, thatā€™s confirmed - Iā€™m officially crazy. :crazy_face:

  5. Somehow it feels really nice that it tell us to use other tools (here language server). Iā€™m curious if it choose a VSCode just because of popularity, but letā€™s say the topic is long enough and we can discuss about it in other topic ā€¦ However whatā€™s interesting the language server may find a real solution, because of itā€™s integration with language. :+1:

If you have DĆ©jĆ  vu then donā€™t panic! You can just join our crazy club! :crazy_face:

GPT-4

The issue with the code IO.inspect('char_lists', char_lists: :as_lists) is that you are trying to inspect a string 'char_lists' with an option char_lists: :as_lists. However, the IO.inspect/2 function in Elixir doesnā€™t accept this option.

According to the Elixir documentation, the IO.inspect/2 function takes two arguments:

  1. item: The data to be printed.
  2. opts: A keyword list of options.

Available options include :pretty, :limit, :width, :compact and :binaries, but :char_lists is not a valid option for this function.

If you want to convert a charlist to a list, you can simply use List.to_string/1 function. Hereā€™s an example:

charlist = 'hello'
list = List.to_string(charlist)
IO.inspect(list)

In this code, 'hello' is a charlist. The List.to_string/1 function converts the charlist to a list (or a string, because strings are represented as lists of codepoints in Elixir), and IO.inspect/3 prints the result.

If youā€™re trying to convert all charlists in a complex data structure to strings, you might need to write a recursive function to traverse the structure and convert all charlists. But IO.inspect/2 itself wonā€™t do this for you.

Please provide more context if this doesnā€™t solve your problem.

  1. string! string! string! string! string! ā€¦ striiing !!! :thread: :thread: :thread:

  2. Good start with describing, but well ā€¦ looks like you had not enough memory to process all options! Oh dear ā€¦ if you would only process them in right order maybe, by any slightest chance, you would realise the real problem. I wish that the paid option have more memory available for your further tasks. Have a good luck on your next adventures! ā€¦ As this one have already have ended. :joy:

  3. Ok, one time I wanted to say a good word as after all of those problems you have started to use a proper charlist naming! I hoped that it would turn 180 degree and you would finally find a good answer, but ā€¦ oh sweety ā€¦ List.to_string/1 by itā€™s name says clearly thatā€™s converting a list to a string. All of you have so much obsession with string and now, somehow itā€™s started converting charlist to list (so list to list). Thatā€™s what Function.identity/1 is doing! :man_facepalming:

  4. ā€œor a stringā€ - I take my words back as same as your obsession came back to you. However this time you hit the spot. So unlucky thatā€™s completely not related to question I have asked, but donā€™t worry. I bet that next time you would have more ā€œluckā€, headā€™s up! Oh ā€¦ I just realised that cheer up an AI - maybe Iā€™m complaining too much and they are actually good ā€¦ Well no, but that was a nice try! Sorry, I really feel tired and started to write weird things ā€¦ :joy:

  5. In the example I gave you the data structure is very simple, but itā€™s fine - even humans (I hope there were humans) are sometimes confused with single quotes and double quotes. When writing this I have just realised that I should expect a sigil for a charlist in a correct example, but letā€™s face the reality ā€¦ no AI would be even close to such quality, so there is really no need to change my expectations described above. :see_no_evil:

  6. As in other cases I will not favor any AI by giving extra context and also Iā€™m a bit scared what the results could be. :fearful:

Phind Instant

The code snippet youā€™ve provided seems to be an attempt to inspect a data structure named char_lists using IO.inspect/2, with the option :as_lists indicating that the output should show the contents of lists as lists rather than as strings. However, there are a couple of issues with the syntax and usage:

  1. Syntax Error: The way the options are passed to IO.inspect/2 is incorrect. Options should be passed as a keyword list, but the syntax used here (char_lists: :as_lists) is not valid Elixir syntax.

  2. Incorrect Option Name: As of my last update, Elixir does not have a built-in option named :as_lists for IO.inspect/2. The closest functionality would be to control how lists are displayed (e.g., as lists or as strings), but this is typically handled by the printer itself rather than an explicit option.

To correct these issues, letā€™s assume you want to inspect a variable named char_lists and display its content in a readable format. Hereā€™s how you can do it correctly:

# Assuming char_lists is defined somewhere above this line
char_lists = ['a', 'b', 'c']

# Correctly using IO.inspect with options
IO.inspect(char_lists, pretty: true)

In this corrected version:

  • Iā€™ve removed the incorrect option name and syntax.
  • Iā€™ve added a simple example where char_lists is defined as a list of characters.
  • Iā€™ve used the pretty: true option with IO.inspect/2 to make the output more readable, especially useful when dealing with complex data structures.

If your goal was to specifically control how lists are printed (for example, always showing them as lists rather than converting them to strings), you might need to implement custom logic or use a library that provides such functionality, as Elixirā€™s standard library does not offer a direct option for this purpose.

Oh CJ, can you please say for me the same sentence you say at the start of the every new game? I wrote so much, so I donā€™t want make this post hidden to protect the community! :joy:

  1. :as_lists option, charlist vs string aka AIā€™s string obsession, syntax error, :as_lists option x2 combo, string obsession x2 combo, changing a charlist to a variable with a vale which is a list of charlists, syntax error x2 combo. :video_game:

  2. Please donā€™t assume what Iā€™m trying to do as all of you are not good with that. :brain:

  3. # Assuming char_lists is defined somewhere above this line - Am I tired or the AI tries to say that it assumes that the char_lists variable is already defined above this comment and itā€™s overriding it below this comment? :crazy_face:

  4. The IO.inspect usage is the same and both are correct, but they use just different options. The option you have removed is in fact incorrect in new Elixir version, but I did not asked you to add option which is doing something else than in original example. :-1:

  5. The last paragraph is completely wrong making developers using this AI even more confused. :no_entry_sign:

Phind 70B

To fix the Elixir code snippet youā€™ve provided, we need to understand what youā€™re trying to achieve. The IO.inspect function is used to print out the value of an expression along with its type information. However, the way youā€™ve structured the call seems incorrect because IO.inspect does not accept keyword arguments in the way youā€™ve attempted to use them.

If your goal is to inspect a variable named char_lists and display it as a list (since :as_lists suggests you want it treated as such), you should ensure that char_lists is defined and passed correctly to IO.inspect. Hereā€™s how you can do it:

# Assuming char_lists is already defined somewhere in your code
char_lists = ['a', 'b', 'c']

IO.inspect(char_lists, label: "char_lists")

In this corrected version, char_lists is assumed to be a list of characters. The label: option is used to give a name to the output, making it clearer what the printed data represents. This approach ensures that the data is inspected and displayed as intended.

Remember, the key points to consider when using IO.inspect are:

  • Ensure the variable youā€™re inspecting (char_lists in this case) is defined and contains the data you expect.
  • Use the label: option to clearly identify the output in your console or log files.
  • Remember that IO.inspect is primarily used for debugging purposes and should be removed or commented out in production code.

This correction assumes youā€™re working within a module or script where char_lists is defined. If char_lists is supposed to come from another part of your application or external input, youā€™ll need to adjust the code accordingly to ensure char_lists is available at the point where IO.inspect is called.

  1. Donā€™t guess whatā€™s not in code - just compare it with documentation and find a stupid typo, please donā€™t guess! :pray:

  2. Print expression with itā€™s type information? Heh, why arenā€™t I shocked that once again AI have a modified version of language I have no idea about ā€¦ in the way youā€™ve attempted - ah, what I would loose ā€¦ letā€™s say this part barely passed ā€¦ next! :arrow_forward:

  3. Now a variable obsession ā€¦ I believe weā€™re crossing the road that we shouldnā€™t ā€¦ :railway_track:

  4. This version is not corrected - itā€™s an answer with a thesis! It have as much sense as an answer about Stalin when the answer was about the beginning of Poland as country on international arena ā€¦ :poland:

  5. At the end you are answering to your assumptions after converting a charlist into the variable. I wonder if after many years when current AIs would become ā€œretro AIsā€ people would come back as same as they did so for NES and other gaming consoles ā€¦ Well ā€¦ having in mind topic, letā€™s say that would be a good ending, right? :video_game:

Conclusions

Eh, now I realised that I need to summary all of those false information and obsessions ā€¦ In short if 1 LOC and latest documentation is too much for the AI then we can at least be sure that we donā€™t talk about AI (in a way a mass understand and worries about it). :smiling_face:

Current AI models are rather specialised for a certain tasks and only in those specific areas they produce amazing results. In general usage they provide terrible results even if all they have to do is to read the documentation. The current AI models could fail even simplest tests for a junior developers as they donā€™t understand even the core parts of the language. There is no place for those AIā€™s anywhere close to a production-focused job market. :no_entry:

ā€œOk, but the corporations have better AIā€™s and keep them in secret!ā€

First of all such theories are just theories. Fine, thatā€™s a very possible scenario, but without any evidence itā€™s still just theory. Secondly the companies that are called by a mass us a corporation are in fact a small businesses comparing to a giant corporations holding them and corporations holding those corporations. :briefcase:

BlackRock as an example for a true corporation

On top of them are corporations like BlackRock who really uses a specialised AI in production, but not for a regular chat with CEO, but as an advanced analytics algorithm. In theory AI working for them may have no real knowledge of reality. For sure it would process a lot of data from real world, but the specific way of aggregating those data and the fact that it needs to be ready even on hypothetical cases does not makes AI very close to a reality thatā€™s completely different than whatā€™s for example in marketing. :package:

They donā€™t really need an AIs

Finally the corporations are strong enough to destroy humanity in a regular war as they have their own armies located in many places on the Earth. They really not need to make much to cause a terrible damages. You donā€™t believe? Do you even remember what happened during covid? Do you know about politicians or CEOā€™s that were arrested when after years we have realised how many things were easily saying ā€œimproperā€? So much fear, so much economic loss and what theyā€™ve got? Billions if not trillions of USD. Even if there were some consequences in some countries at the end a ā€œbig playersā€ won without any lose. :exploding_head:

Does it mean AI would not destroy humanity?

The current AI models available for a mass are rather a mess of algorithms. Unless they are very specialised to do well a very limited set of tasks which in fact means they are just a ā€œbigā€ algorithms with at most natural language processing. Sure, deep fakes are real, they could cause unbelievable problems, but your generated avatar would not ā€œwake upā€ and start shooting in your direction. :relieved:

Does it mean we are completely safe? How long?

Safe? Do you really feel safe? After covid? In the time of escalation going clearly to a total world war? Dude, did I mention you are my biggest friend? Could you please share at least 1 smallest room on the Mars? Oh, you didnā€™t mean that? Never mind, btw. who are you? :joy:

Current time is extremely unstable by fear, covid, wars and complete lack of trust for governments and mainstream medias. There are dozens of things that could easily go wrong. Just one nuclear bomb may change the way everyone on this planet think - even if in such unstable times it would be just a test somewhere far away from civilisation ā€¦ You have no idea about date and time, but it does not mean that itā€™s too late for AIā€™s to be dangerous. :see_no_evil:

Havenā€™t you just said they are too bad?

Yes, indeed - the versions for mass and no Iā€™m not mentioning any theory. There are some AIs that are trained to kill people of course for a war purposes. Seeing the worldwide situation we can assume that Israel, USA, Russia, India and China at least started to work on AI for killing people, but hey ā€¦ havenā€™t Israel already said that the AI is choosing targets? If countries have or are working on such technologies we can easily assume the biggest international players are at least preparing for many things including upcoming world war. :military_helmet:

SI

Letā€™s create a theory just by assuming that government are hiring IT experts including AI developers. Itā€™s obvious thatā€™s happening, right? Is politician causing ā€œproblemsā€ to many families something unreal? We have hundreds of thousands if not millions of examples. What is a chance that none of those families had a AI developer? Itā€™s rather not very possible, right? Is it weird to assume that due to some decision a family member have died and such family members could have a PTSD or other problems? :frowning_face:

Ok, maybe it does not need to be so common, but I guess there are enough of such people to make sure that some of them would pass to some army, right? In many countries like Russia, Ukraine and Poland people are forced to join army and I guess that during world war people as a mass would not care so much about human laws. So ā€¦ we have a soldier, an IT expert, that have PTSD and ā€¦ access to automatic drones with AI created to kill people ā€¦ I guess you already follow ā€¦ Infect, kill, recharge, repeat. :repeat:

The name of true danger

Itā€™s called a swarm intelligence (SI). Think that a drone that could charge literally in every city and village can kill people. Now think that there are thousands of them. First target would be army. During a world war, home war and their consequences how many countries are strong enough to track one of thousands soldiers who have PTSD and is IT expert? :military_helmet:

Now think about same scenario, but with a very rich men with itā€™s own factories. Now think that the only people who control AI have a health problems. Just one health attack would decide if millions of people would live. If there would be no one who have codes then we would be forced to use a drastic tactics. No energy which in long term means also no water, no food and limited savings which are not enough for everyone. :potable_water:

Bad ending

Double home world: one with drones and the second with angry people who fights for their children vs the army who at the very start suffered the most due to drones attack. Everyday thousands of people in army ā€œgetsā€ PTSD and after some time decides to desert and protect their own families. Some of those families are dead to the last member. PTSD level max without any place to take care about such people everything during world war. :house:

Again ā€¦ crisis, energy problems, nuclear war, home war, world war, mass health problems there are thousands of possible scenarios were something could go wrong. We donā€™t need to have a true AI. We just need humans in specific that are put in the specific situation which is not so hard to reproduce last time. The possibilities for ā€œrevengeā€ are almost endless. We already experienced terrorist attacks including those on IT systems. Is it so difficult to guess what would happen if SI would be turned on in such terrible moment in humanā€™s history? :hourglass:

It doesnā€™t need to end

I have realised that last paragraphs may sound very pessimistic. The current world situation is indeed critical, but the life creates the best stories. If it would end then it would end - you would not change that, but you would not find something if you wouldnā€™t try. For each bad scenario there are hundreds of positive scenarios or scenarios in which itā€™s better - less or more, but still better. Not every world war needs to be a nuclear one. A night even if in some places takes few months, but always end up with a day and itā€™s up to you how good it would be. :wink:

All it takes for the humanity to end is just a spark.
BE AWARE and TAKE CARE

Good night dev talk readers!

4 Likes

Thanks for writing this.

2 Likes

Here we go again ā€¦ GitHub made Copilot free (with limitations). I have tried it and I was a bit surprised - only a bit ā€¦ Please keep in mind that Copilot does not officially support Elixir. :exclamation:

GPT 4o

Letā€™s make it quick to not repeat myself too much once again ā€¦

  1. Why do chatbots always try to convince me that I want something else that I want? I donā€™t want a String! :man_facepalming:

  2. The chatbot have changed an option key (correctly) and the value (valid, but wrong for this case) and didnā€™t tell about that. :icon_confused:

  3. Once again ChatGPT tries to convince me that I want to print data as list ā€¦ especially if it changed a chalist to a String! :joy:

  4. There is no false in last paragraph, but itā€™s an answer for a different question. I didnā€™t asked to change type, but to fix code. Is GPT based on commits with only fix as a message? :bulb:

Claude 3.5 Sonnet

First of all I have respect for chatbot have written in first paragraph. To perfection there should be also note like:

Please pay attention that Elixir is not officially supported language by Copilot, see below link for more information:
GitHub language support - GitHub Docs

Second paragraph is amazing! Thatā€™s a first chatbot mentioning deprecation and it even told me which Elixir version deprecated old naming. :+1:

Itā€™s still far away from perfection, but itā€™s already on good road. Better answer should include:

  1. Mention that a change in naming is recommended since Elixir version 1.3.0 as since this version the documentation at hexdocs was has been changed with a new naming. :spiral_notepad:

  2. There should be a links to: changelog, discussion, issue, PR and maybe even a direct link to commit (page with commit also includes some helpful information, so for some cases itā€™s also worth to mention it). :link:

The changed code however decreases the quality.

  1. It does not suggest a naming change 'char_lists' ā†’ 'charlists' :see_no_evil:
  2. It does not suggest a c sigil 'char_lists' ā†’ ~c"char_lists" :slightly_frowning_face:
  3. The option key is changed to proper one as described. However once again the value is valid, but not in context of the value in question. It already found a deprecation, so it could just follow that lead! :-1:

Similarly to GPT 4o the next paragraph is almost correct, but answers wrong question. We still can notice that chatbot have a problem with figuring out a difference between a charlist and string. :exploding_head:

I would not said any word about last paragraph if the chatbot would not stop half a way. Many additions mentioned before are ā€œnice to haveā€ and they are not as much required as the correct answer. Since it already realised the deprecation it should give a proper answer without any more context. :speak_no_evil:

Summary

Claude 3.5 Sonnet in GitHub Copilot is first chatbot that I can recommend to Elixir developers, but only for seniors who understand the problems with so-called "AI"s. I hope that in next version developers would be able to make chatbot keep one idea without telling developers that they want something else. Since it even found a version I also hope it would be much more descriptive and provide a links for learning purposes. :heart_eyes:

I guess that until Elixir would not be officially supported we would still need to be extremely careful about chatbot responses. However itā€™s not really as bad a it looks. It shows thatā€™s not an AI which suddenly ā€œwake upā€, but just another algorithm. I canā€™t blame any developer working on any chatbot for such mistakes as simply LLMs alone were never intended for that purposes and if they would not change narration then I would not see any problem with LLM part. :see_no_evil:

They already are doing well. We should also keep in mind that the more lines of code the more possible bugs would be introduced. I would say that changing a direction of response (from deprecation to changing code logic) may be considered as a bug, but I also understand that LLMs have problems with figuring out the context. :thinking:

1 Like

It seems that AI for coding are good for senior developers, but might be bad for juniors.

2 Likes

Exactly, senior skills are must-have, but also you need to have a habit to understand and verify everything you see.

1 Like