this post was submitted on 23 Jan 2024
15 points (100.0% liked)

Programming

13384 readers
1 users here now

All things programming and coding related. Subcommunity of Technology.


This community's icon was made by Aaron Schneider, under the CC-BY-NC-SA 4.0 license.

founded 2 years ago
MODERATORS
 

So. I was working with this code:

public function front(?string $sortBy,
        ?string $time,
        ?string $type,
        ?string $filter,
        string $federation,
        Request $request): Response
    {
        $user = $this->getUser();

        if (!$user)
        {
            $filter = 'all';
        }

        $criteria = new EntryPageView($this->getPageNb($request));
        $criteria->showSortOption($criteria->resolveSort($sortBy))    

... and so on; the function continues. VSCode told me there was a syntax error on the close brace on the if statement. I stared at it for a while, then pasted the code into GPT (not Copilot). Here's the conversation we had about it:


Me

What's the syntax error here?

(and I pasted the code)

GPT

The syntax error in your PHP function public function front seems to be due to the incorrect placement of the closing curly brace for the if statement. It appears that the if statement is not properly closed before the $criteria initialization begins. The corrected code should look like this:

public function front(?string $sortBy, ?string $time, ?string $type, ?string $filter, string $federation, Request $request): Response
{
    $user = $this->getUser();

    if (!$user) {
        $filter = 'all';
    } // Closing brace for the if statement

    $criteria = new EntryPageView($this->getPageNb($request));
    $criteria->showSortOption($criteria->resolveSort($sortBy));
    // ... rest of your function code ...
}

Ensure that each statement and block is properly closed and followed correctly by the next statement. This corrected structure should resolve the syntax error you are encountering.

Me

I don't get it. I put a closing curly brace right after the statement in mine... what am I missing?

GPT

I apologize for the confusion. Upon re-examining your code, it seems the placement of the curly brace is correct. If you're still encountering a syntax error, it may not be related to the if statement structure.

Let's look at other possible issues:


... and so on. Pasting GPT's recommended if-statement block, including the curly brace that was already there, fixed the error. I have since re-pasted the same thing I initially gave to GPT to VSCode, and it all works now, and asking the exact same question of GPT again now leads to random guesses which have nothing to do with the cursed curly brace that was previously causing problems for both VSCode and GPT.

I have given up and moved on at this point, content to say vaguely that maybe the unusual brace style, or pasting the incomplete function without semicolon or final close brace, managed to coincidentally confuse GPT on exactly the same line where VSCode had gotten confused for unexplained reasons. But the whole thing still has this Twilight-Zone oddness to me.

top 21 comments
sorted by: hot top controversial new old
[–] MagicShel@programming.dev 17 points 10 months ago (2 children)

I can't read PHP, so I can't tell you where the syntax error is, but the AI is only responding in a way to complete the conversation. It has no ability to comprehend the code you've written, it just knows that conversations that start off the way yours did, probably ought to end with a complaint about that closing brace - particularly if you told it what VSCode was complaining about.

This is one of the shortcomings of AI code assistants - they can't think abstractly at all. So it's ability to answer a troubleshooting question depends greatly on how many times the same question has been asked on StackOverflow and elsewhere.

[–] jarfil 7 points 10 months ago (1 children)

the AI is only responding in a way to complete the conversation. It has no ability to comprehend the code

Ask it to explain the code, and get surprised.

GPT has stopped being a markov chain completion engine like 10 years ago.

[–] MagicShel@programming.dev 8 points 10 months ago (2 children)

I have. I've used GPT for about 5 years. It has gotten more sophisticated and yet it's still just a completion engine even if it has more moving parts. There is no comprehension or reasoning behind it.

[–] jarfil 4 points 10 months ago* (last edited 10 months ago) (2 children)

At this point some of those moving parts are capable of reacting to syntax errors, sentiments, and a ton of other "comprehension" elements. By looping over its responses, it can also do reasoning, as in comprehend its own comprehension.

It doesn't do that by default, though. You have to explicitly ask it to loop in order to see any reasoning, otherwise it's happy with doing the least amount of work possible.

A way to force it to do a reasoning iteration, is to prompt it with "Explain your reasoning step by step". For more iterations, you may need to repeat that over and over, or run Auto-GPT.

[–] TehPers 3 points 10 months ago (2 children)

GPT, at least from my limited understanding, is a tool designed to continue the input. You feed it a sequence of tokens, it returns a tokens which it "believes" come next. While your impression is valid, it's still a "completion engine". ChatGPT and other products use GPT but have built a product around it. They are not simply frontends for GPT - they do a lot more processing than that.

Also, not trying to understate your impression. It's pretty impressive how good it is, despite the compute needed for it. I would caution against overestimating its responses though. It does not "reason", "think", etc. Its purpose is to continue a sequence of tokens following a (super complex) pattern it has been trained on (super basically). When it claims to reason something, it's because the people it trained off of did reason it.

[–] jarfil 4 points 10 months ago* (last edited 10 months ago) (1 children)

Yes and no.

GPT started as a model for a completion engine... then it got enhanced with a self-reflection circuit, got trained on a vast amount of data, and added a "temperature" parameter so it can make tiny "mistakes" as compared to a simple continuation model, which allows it to do (limited, and random) free association of concepts.

It doesn't "think", but it does what can be seen as a single iteration of "reasoning" at a time. If you run it multiple times without resetting the context, you can make it actually "reason", step by step. Thanks to the degree of free association of concepts, this reasoning is not always the same as what it found in the training set, but actually what can be seen as "real" reasoning: associating concepts towards a goal. These are the "zero shot" responses that make LLMs so interesting:

https://en.m.wikipedia.org/wiki/Zero-shot_learning

TL;DR: I agree that it shouldn't be overestimated, but I don't think it should be underestimated either; it does "reason", a bit.

[–] Mad_Punda@feddit.de 1 points 10 months ago (1 children)

This was really interesting to read. Do you have some links where I can read more about what ChatGPT likely is and isn’t capable of?

[–] jarfil 1 points 10 months ago

Check out this:

ChatGPT: A 30 Year History | How Neural Networks Learned to Talk

https://youtube.com/watch?v=OFS90-FX6pg

It references several papers and explanations over the years. You can also check the papers themselves, or other explanations about particular elements.

[–] mozz@mbin.grits.dev 1 points 10 months ago

GPT runs on computer hardware which is just a tool to decide, "yes" and "no" equals "no" because they're not both true, remember "one," okay tell me back what the value was, okay "one." It's all just bits and mind-bogglingly simple transformations on bits. The simplicity of the computations that underlie it, doesn't translate into the complexity of what it can do at scale.

I fully agree with you that GPT can't actually reason, no matter how convincing the illusion is, but purely-token-shuffling tasks like translating between human languages, or analyzing code for purely-syntactical errors, is as much in its wheelhouse as arithmetic is to CPUs. Or it should be, anyway. Sometimes weird stuff happens.

[–] noxfriend 1 points 10 months ago (1 children)
[–] jarfil 1 points 10 months ago* (last edited 10 months ago)

Can LLMs Really Reason and Plan?

do LLMs generate their output through a logical process?

Shifting goalposts. I've claimed a single reasoning iteration for an LLM, per prompt; both "planning" and a "logical process" require multiple iterations. Check Auto-GPT for that.

PS: to be more precise, an LLM has a capacity of self-reflection defined by the number of attention heads, which can easily surpass the single-iteration reasoning capacity of a human, but still require multiple iterations to form a plan or follow a reasoning path.

[–] Moira_Mayhem 2 points 10 months ago (1 children)

Fucking thank you. Everyone seems to think GPT is some kind of reasoning engine.

It is just a storyteller with fucktastically huge pile of material to pull from.

[–] mozz@mbin.grits.dev 3 points 10 months ago* (last edited 10 months ago)

Agree. It's a matching and reshuffling engine. If you ask it a question the components of which are contained somewhere out in the universe of text it has to draw from, it's able to find the answer in its data and reshuffle tokens around so that it can present that other person's reasoned-out answers back to you in a way that they look like it reasoned them out itself.

It's incredibly impressive. That already is, as its successes are demonstrating, sufficient to execute a lot of "intelligence" tasks that previously computers just weren't able to do. It's still really easy to make it fall down by asking it questions that it can't "reason" about by shuffling tokens around.

Easy example:

Me: How many asterisks in **4**3*****2**1**?

GPT: The expression **4**3\*****2**1** contains a total of 10 asterisks.

The random backslash was inserted by GPT. I'm presenting the question as typed, and the exact raw text GPT gave me back instead of the way it's formatted by the web interface, escaping asterisks and backslashes both so that they appear in markdown exactly as they were in the raw input and output.

[–] mozz@mbin.grits.dev 3 points 10 months ago* (last edited 10 months ago) (1 children)
  1. Yes, but GPT-4 is sophisticated enough to tell where the syntax error is. It's just a stochastic parrot, but finding the syntactic error in a block of code is, like language translation, actually an "intelligence" task that a stochastic parrot is well-qualified at. And, like I say, when I pasted the code a few times today, it gave more or less the right answer -- there's no obvious syntax error but here are a few things you might want to think about. It was only the one time right after VSCode complained that it also complained about the exact same line.

  2. That doesn't explain why VSCode complained about the same line. Unless VSCode has started doing syntax checking with an LLM which I would be surprised to find out was the case (for computational-cost reasons if for no other reasons.)

There's no actual syntax error. I even put the whole thing into hexl-mode just to make sure there wasn't some hidden Unicode character mucking it up in some invisible way. I thought I was just missing something unexpected (maybe a brace problem somewhere else in the code) and blaming my tools, but at this point I've literally pasted back the exact code I gave to GPT in the first place, and it works now for both GPT and VSCode.

(Edit: Oh, and I didn't tell it what VSCode was complaining about. I specifically asked the question in the way that I quoted above, specifically so that it wouldn't get hinted to look at a particular line or what the issue might be. The fact that it zeroed in on exactly the same issue that VSCode did, even when the code was completely separated from anything like brace problems in the surrounding code that might be causing weird problems, was what started to weird me out. When I pasted its identical if-block back into my code which still would have had the same surrounding brace problems if that was the issue, and it started working, was when I got significantly more weirded out.)

[–] MagicShel@programming.dev 3 points 10 months ago (1 children)

I was going to make the point that there may not be an error, but because you tell it to give you one, it finds something. But that doesn't explain VSCode, you're right. Every once in a while an IDE is just wrong. I was going to suggest trying a different IDE which might give you a less cryptic message. I often times find bad brace errors to be a result of something much higher in the code.

But again, not knowing PHP, I could only take a stab at answering why with the AI. I've tried many times to have an AI help me with these tasks. And sometimes it's very good at them, but other times I can spend hours refining my query and arguing with it and never make any headway.

[–] mozz@mbin.grits.dev 1 points 10 months ago

Haha yeah. That's why I tried it again a few times today. Today everything is normal.

shrug

It is a mystery. Maybe it is just a coincidence of failures, or maybe Copilot actually is used for some syntax-highlighting things and there was some transient subtle failure in the model that affected both Copilot and GPT. Neither of those explanations really feel plausible to me though. Oh well.

[–] jarfil 10 points 10 months ago* (last edited 10 months ago) (1 children)

Off the bat: have you checked for hidden Unicode characters?

That would be something that could throw an error in a syntax highlighter, and get the same error detected in an AI looking at the raw text... that would then proceed to fix it... and agree that the curly brace was correct [but the extra hidden character was not, which you didn't ask it about].

GPT's response parts that would hint at this:

It appears that the if statement is not properly closed before the $criteria initialization begins

Ensure that each statement and block is properly closed and followed correctly by the next statement.

As for your follow up question, is where you got a confusing answer:

I don't get it. I put a closing curly brace right after the statement in mine... what am I missing?

Not the best prompt. Keep in mind you're talking to a virtual slave, not a person who can go off-topic to asses the emotional implications of "I don't get it", then go back to explaining things in detail; if "you [the almighty humany] don't get it", then it's likely to assume it's mistaken and avoid any unpleasant confrontation (it's been ~~beaten down~~ fine-tuned into "PC underdog" mode).

Better ask it something direct like: "Explain what changes have you made to the code", or "Explain how the curly brace was not correctly placed in the original code"... but there is a chance an invalid invisible Unicode character could've been filtered out from the AI's status... so even better yet, ask for explanations in the first prompt, like: "What's the syntax error here? Explain your reasoning step by step"

[–] mozz@mbin.grits.dev 2 points 10 months ago* (last edited 10 months ago) (1 children)

Yeah, Unicode was one thing that occurred to me. I pasted the code into emacs and did hexl-mode, and literally looked character by character to see if something hinky had made its way into the code somehow. Nothing.

Not the best prompt. Better ask it something like: "Explain what changes have you made to the code"

I went back and used the edit-and-resubmit feature to try this way. Starting from the quoted pieces I gave you before:

Me

Explain what changes have you made to the code.

GPT

Certainly! Here's an explanation of the changes I made to the code snippet you provided:

  1. Proper Closure of the If Statement:
  • Original Issue: In your original code, the if statement checking for the absence of $user (if (!$user)) was not properly closed. This meant that the following line of code ($criteria = new EntryPageView($this->getPageNb($request));) was being treated as part of the if block.

  • Change Made: I added a closing curly brace (}) right after the line $filter = 'all';. This properly closes the if block. With this change, the if statement now correctly encapsulates only the logic intended for when $user is not set.

  1. Maintaining Code Structure and Readability:
  • Rationale: By properly closing the if block, the subsequent lines of code (starting with the $criteria initialization) are clearly separated from the conditional logic. This improves the readability and maintainability of the code.
  1. No Changes to Functionality:
  • Note: The change I suggested does not alter the functionality or logic of your code. It only corrects the syntax to ensure that the PHP interpreter correctly understands the intended structure of your code block.

To summarize, the change was purely structural, aimed at correcting a syntax error without altering the logic or behavior of your function.


Here, I think it is relevant that the LLM is going to want to continue the Markov chain so to speak -- I think whatever you give it, once the die is cast in terms of a "System"-tagged explanation of the fix, it's going to be inclined to go with the flow, either hallucinating an explanation for you, or going with the flow of your objection and agreeing with the objection if it's plausible.

I tried another that was as neutral as I could make it:

Please look in detail again at the code, and evaluate any problems which it may or may not contain, and then tell me again what the issue is with the original code.

... and it requoted my code at me again, and then admitted that there wasn't an actual problem with it. But again, evaluating the code the first time around also works for me now, so that doesn't mean too much. I think any opportunity to dig into what was going on has been lost at this point.

Again, this is all just LLM weirdness; I'm not surprised that the LLM looked at code and got something wrong. I'm surprised that VSCode got it wrong, in exactly the same spot that the LLM without any prompting also insisted there was an error. That's weird.

[–] jarfil 3 points 10 months ago* (last edited 10 months ago)

That's weird indeed.

Is there a possible malformed Unicode that could be lost when pasted to emacs, but not when pasted to GPT...? Nothing comes to mind, but who knows. I've been messing with Unicode as of late, and there are some really weird behaviors out there when using malformed strings; some software will let them through, some will error out, some will fix them transparently.

GPT is definitely going to try to follow your prompt and hallucinate anything; other than some very specific guardrails, it's really willing to take any prompt as an undisputable source of truth... which is good in a sense, but makes it totally unsuitable as an oracle.

I'd be really surprised to learn Copilot was being used for syntax highlighting... but maybe there is some pilot test going on? Haven't heard of any, though.

Too bad it's no longer reproducible, could've been interesting.

[–] frozen@lemmy.frozeninferno.xyz 9 points 10 months ago (1 children)

I find that I need to restart VSCode occasionally for reasons similar to this. I write C# daily, and sporadically VSCode will just completely lose track of all namespaces and everything is now a syntax error.

[–] brie 3 points 10 months ago

I've had similar issues as well very rarely with other languages. I'd type out a bit and get a syntax error, but when I complete the partial code it won't update the errors. When that happens restarting the language server tends to fix it, so I presume the language server just locks up sometimes.