home.social

Search

1000 results for “dis”

  1. Every engineer running autonomous agent loops knows the in-context reflection drill. The agent runs a bash script, fails on an obscure permission flag or an unquoted path, sees the error in stderr, reflects on what went wrong, and fixes it on the second try.

    The task finishes green. You log the run, close the thread, and move on.

    Tomorrow morning, the same agent hits the exact same edge case in a fresh session and makes the exact same mistake all over again.

    In-context reflection is a temporary patch. It burns context tokens, bloats the prompt across long tool sessions, and evaporates the millisecond the execution context clears. The traditional alternative, full-model fine-tuning, is a non-starter for everyday errors. Nobody is spinning up a multi-GPU training run every afternoon to update base weights, and doing so risks catastrophic forgetting across existing tool workflows.

    A research team from Princeton University and Meta FAIR just published a practical middle ground. In their paper, Don't Forget What You Just Learned: Self-Directed Repair Turns Agent Mistakes Into Lasting Lessons (arXiv:2610.31846), Yuval Kansal, Karen Ullrich, Polina Kirichenko, Ilia Kulikov, Niraj K. Jha, Mohammad Pezeshki, and Mark Ibrahim lay out an architecture called Self-Direction.

    Instead of writing a reflection note into a scratchpad file or relying on a fragile system prompt append, the agent distills its execution mistakes directly into tiny low-rank adapter weights.

    The failure of the reflection scratchpad


    Modern agent setups usually address cross-session memory with one of two patterns:

    1. Appending error reflections to an agent scratchpad or MEMORY.md file.
    2. Embedding failure traces into a vector database for retrieval-augmented prompt injection on future turns.

    Both patterns struggle in production. Text notes appended to context eat away at attention budgets. As the reflection scratchpad grows, agents suffer from prompt dilution and instruction drift. More critically, an agent reading a natural-language description of an old error frequently misapplies the lesson to unrelated tool calls.

    The Princeton and Meta team tracked this failure mode across open-ended research workflows (GAIA), multi-step tool execution (Claw-Eval), and command-line environments (Terminal-Bench 2.1). When agents relied on standard in-context retries, their correction reliability plummeted when facing recurring variations of the same underlying task. The agent repeatedly fell into the same traps because the underlying policy distribution never moved.

    Standard Agent Flow:
    Error -> In-context reflection -> One-off fix -> Session ends -> Lesson lost

    Self-Direction Flow:
    Error -> Trajectory reflection -> Low-rank adapter update -> Persistent library -> Routed on demand

    Distilling mistakes into 0.02% parameter budgets


    The core mechanism of Self-Direction sits between ephemeral prompt engineering and heavy offline training.

    When an agent fails an execution trajectory, it runs an internal critique to isolate the decision step that caused the downstream failure. Once the corrective trajectory is verified, the system does not just print the correction. It freezes the base model weights entirely and trains a micro-LoRA adapter on the self-directed repair pair.

    The parameters updated during this step represent roughly 0.02% of the base model's parameter count.

    Because base weights remain frozen:

    1. Existing base model capabilities and general conversational skills stay intact without degradation.
    2. Training completes locally in seconds on consumer hardware without cluster coordination.
    3. The resulting adapter file is lightweight enough to store, version, and swap on the fly.

    The agent saves these targeted adapter checkpoints into a persistent local library. When a new prompt arrives, an automated routing layer inspects the problem context and attaches the relevant adapter before the execution loop begins.

    Benchmark gains across open-ended tasks


    The researchers tested Self-Direction on open-weight models from the Qwen family across three distinct agent benchmarks:

    • GAIA: Multi-modal, complex multi-hop research requiring web navigation and reasoning.
    • Claw-Eval: Structured tool-use workflows testing API interactions and parameter extraction.
    • Terminal-Bench 2.1: Unconstrained Linux command-line tasks, bash scripts, and system administration.

    Across these environments, adding Self-Direction improved overall task completion rates by 8.9 to 17.0 percentage points compared to standard in-context reflection baselines.

    More importantly, the recurrence rate of known errors dropped sharply. The authors found that Self-Direction nearly doubled the reliability of corrective actions on subsequent encounters. Instead of guessing whether the agent would notice a text hint in its system prompt, the updated adapter shifted the token sampling probabilities directly away from the faulty API syntax.

    The team also evaluated out-of-distribution transfer. A small set of adapters trained on specific terminal failures generalized across dozens of unseen tasks involving related file-system permissions and process management. The agent learned the structural pattern of the fix rather than memorizing the exact shell string.

    What this means for local agent runners


    For developers building and hosting agent infrastructure, this work highlights an architectural transition.

    Over the past two years, the industry leaned heavily on prompt stuffing to simulate agent learning. We treated context windows as infinite scratchpads, piling up few-shot examples, dynamic rules, and post-mortem notes until the prompt became brittle.

    Self-Direction shows that treating execution errors as online distillation targets produces cleaner long-term behavior. When an agent trips on an environment quirk, the solution is not to explain the error back to the model in prose every time it wakes up. The solution is to let the agent compile the lesson into weights, index the adapter, and move forward.#ai #agents #python #opensource #software #coding #development #engineering #inclusive #community
    Why In-Context Corrections Do Not Stick in Agent Loops

  2. Investec and Shoprite discuss potential retail banking partnership to expand financial services in South Africa

    Source: Wikipedia. The discussions are reportedly ongoing, although the structure of a possible agreement has yet to be determined. Neither company has confirmed a deal, and it remains uncertain whether the negotiations will result…

    pressportal.co.za/stream/story

    #pressrelease #AfricaNewsroom #bizcommunity #publicrelations #africa #southafrica

  3. NOL Universe Discloses Data Breaches Affecting Interpark Tour Bookings and Employee Records

    South Korean travel platform NOL Universe disclosed two security incidents involving unauthorized access to customer booking records and employee information in October 2026. The incidents exposed personal information and encrypted internal system passwords, prompting the company to patch the vulnerabilities and request assistance from national cybersecurity authorities.

    ****
    #cybersecurity #infosec #incident #databreach
    beyondmachines.net/event_detai

  4. Ciberataques potenciados por IA disparam no Japão e causam prejuízos milionários. Inteligência Artificial é usada para explorar vulnerabilidades em empresas como a GMO Internet Group e a Park24. 🤖

    🔗 tugatech.com.pt/t93405-ciberat

    #ataque #dados #group #internet #resposta 

  5. We just discovered this morning that our mailing list software inexplicably and unexpectedly removed over 350 people from the list this weekend, including many of the maintainers. We're working to fix this and get everyone who was removed back on the list. It may take a few days.

  6. The new iPad mini has a larger 8.5 inch OLED display with a nano-texture option, 2X higher peak-brightness, thinner bezels, a thinner design, and an A20 Pro processor for up to 60% faster CPU, 2.7X faster GPU, and 4.5X faster AI. At $699 and up, it's also $200 more than its predecessor. apple.com/newsroom/2026/10/app

  7. Luca a discutat cu guvernatorul 🏦#BNR Mugur despre ”situația sectorului bancar”, în contextul amenzilor uriașe aplicate de în controversatul dosar al stabilirii indicatorului 📉#ROBOR.

    🔗 wp.me/p9KpFA-5LLn

  8. Johns Hopkins Bayview Discloses Data Breach After Patient Data Was Uploaded to Unapproved AI Tool

    Johns Hopkins Bayview Medical Center disclosed a data breach affecting approximately 3,200 patients after an employee uploaded sensitive patient information to an unapproved third-party AI tool. The hospital requested deletion of the data, notified affected patients, and is offering 12 months of complimentary credit monitoring.

    ****
    #cybersecurity #infosec #incident #databreach
    beyondmachines.net/event_detai

  9. Flathub has set their Discourse forum to read-only due to lack of participation. "Realistically, it never took off, becoming another issue tracker to keep an eye on. A forum where people post and wait for an answer that never comes is worse than no forum at all."

    Seems like the right decision. It's a shame there's not a good catch-all discussion forum for Linux users, or maybe there is and I don't follow it... but it's not entirely sustainable for every project to have to maintain their own forum.

    docs.flathub.org/blog/discours

  10. 📍 South Sandwich Islands region
    🕐 Mon 26 Oct 2026 11:01 UTC
    🌍 M4.8 Earthquake 🟢 Light
    📊 Magnitude: 4.8
    📏 Depth: 173.5 km — Intermediate depth
    🗺️ -59.8141, -27.7087

    🔗 earthquake.usgs.gov/earthquake

    #Earthquake #Seismic #EarthAlerts #DisasterAlert #BreakingNews #Environment #Nature #Science #OffGrid #SouthSandwichIslandsRegion

  11. 📍 205 km NW of Port-Olry, Vanuatu
    🕐 Mon 26 Oct 2026 12:13 UTC
    🌍 M5.2 Earthquake 🟡 Moderate
    📊 Magnitude: 5.2
    📏 Depth: 10 km — Shallow
    🗺️ -13.8613, 165.6029

    🔗 earthquake.usgs.gov/earthquake

    #Earthquake #Seismic #EarthAlerts #DisasterAlert #BreakingNews #Environment #Nature #Science #Prepping #Portolry #Vanuatu

  12. Aujourd'hui on a discuté à table : "pourquoi les personnes qui s'émerveillent devant les IA sont systématiquement des hommes ?"

    Question bonus : "pourquoi une femme qui utilise un LLM se sent mal à l'aise, tant dis que les hommes se sentent puissants et plus intelligents ?"

    Pour la posé d'une autre façon, "pourquoi les femmes qui utilisent les LLM restent discrètes, alors que les hommes se transforment en VRP d'Anthropique et d'OpenAI au quotidien ?"

    (et en vrai, comment on peut être fier de dire "j'ai tout fait avec Claude je suis très intelligent" ?)

    #ai #questions #sexisme #tech

  13. Have to disagree with @gruber on the #iPhoneDuo. I find the folded configuration just as useful as the unfolded. Coming from my Air, I find it much easier to use one-handed for quick tasks.

  14. 📍 81 km SSE of Akutan, Alaska
    🕐 Mon 26 Oct 2026 11:38 UTC
    🌍 M4.6 Earthquake 🟢 Light
    📊 Magnitude: 4.6
    📏 Depth: 35 km — Shallow
    🗺️ 53.5071, -165.1239

    🔗 earthquake.usgs.gov/earthquake

    #Earthquake #Seismic #EarthAlerts #DisasterAlert #BreakingNews #Environment #Nature #Science #OffGrid #Akutan #Alaska

  15. Geriatric chronic kidney disease patients benefit from SGLT2 inhibition

    New research uncovers the potential benefits and risks of sodium-glucose cotransporter 2 (SGLT2) inhibitors for adults aged 80…
    #NewsBeep #News #Health #CA #Canada #Chronic #ChronicKidneyDisease #Glucose #Heart #Kidney #kidneydisease #mortality #Nephrology #research #therapy
    newsbeep.com/ca/946744/

  16. 📍 218 km NW of Port-Olry, Vanuatu
    🕐 Mon 26 Oct 2026 11:17 UTC
    🌍 M5.0 Earthquake 🟡 Moderate
    📊 Magnitude: 5.0
    📏 Depth: 10 km — Shallow
    🗺️ -13.9396, 165.3858

    🔗 earthquake.usgs.gov/earthquake

    #Earthquake #Seismic #EarthAlerts #DisasterAlert #BreakingNews #Environment #Nature #Science #OffGrid #Portolry #Vanuatu

  17. I've gone with Distroless from Google - smaller attack surface.
    However, actually getting these images is a little more faff than Docker Hub.
    First, you have to ignore the GCP address, and head to the github repo. There you'll find a list of images WITHOUT needing to log into GCP.

    github.com/GoogleContainerTool

    #gcp #docker #programming #security #code #containers

  18. sunny side down 928

    dream pop, bedroom pop, shoegaze, post punk and everything in between. music for the quiet times in life that works when basking in a hammock on the beach as well as on rainy and foggy afternoons. volume 928

    loma.ml/display/373ebf56-576a-

  19. sunny side down 927

    dream pop, bedroom pop, shoegaze, post punk and everything in between. music for the quiet times in life that works when basking in a hammock on the beach as well as on rainy and foggy afternoons. volume 927

    loma.ml/display/373ebf56-126a-

  20. sunny side down 926

    dream pop, bedroom pop, shoegaze, post punk and everything in between. music for the quiet times in life that works when basking in a hammock on the beach as well as on rainy and foggy afternoons. volume 926

    loma.ml/display/373ebf56-636a-

  21. A CPU-bound Python job split across four threads took 3.6 seconds on my machine. The same job split across four of Python 3.14's new subinterpreters took 0.9 seconds, roughly what one thread alone takes to do a quarter of the work. That part matched what I expected from the PEP. What I did not expect was that asking one of those subinterpreters to run two things at once does not slow it down. It refuses outright.

    concurrent.interpreters is new in the standard library as of Python 3.14, released on 7 October 2026. Subinterpreters themselves are not new - they have existed in the C API since Python 1.5 and CPython has used them internally for years - but PEP 734 is what makes them usable from ordinary Python code, with no C extension required. Each subinterpreter gets its own Global Interpreter Lock, which is the part worth testing: it is the thing that is supposed to let CPU-bound Python code actually use more than one core without reaching for multiprocessing.

    I tested it against a CPU-bound workload (counting primes below 400,000, a plain Python double loop with no C extensions to hide behind), compared against threads, processes, and a single thread, three runs each, inside a python:3.14-slim container with four cores available.

    The headline number

    approachtime for 4x the worksingle thread (1x unit, for reference)0.77 - 0.80s4 OS threads, classic GIL3.51 - 3.70s4 subinterpreters (new in 3.14)0.89 - 0.98s4 processes (multiprocessing)0.95 - 1.30s


    Four threads doing four units of CPU-bound work took more than four times as long as one thread doing one unit - 3.6s against roughly 0.8s, which is actually a bit worse than the 3.2s you'd get from perfect serialisation, because the GIL has to keep stopping one thread to let another run. Four subinterpreters doing the same four units took about 0.9s: close enough to the single-unit baseline that the extra three units of work were, for practical purposes, free. That is real parallelism, not a scheduling trick, and it lands in the same place multiprocessing already does.

    What it refuses: one thread per interpreter, not shared


    The PEP's selling point is that each interpreter has its own GIL. I wanted to see what happens when two threads try to use one interpreter's GIL at the same time, expecting it to behave like classic Python: both threads run, the shared GIL makes them take turns.

    That is not what happened. A single Interpreter object only tolerates one caller. A second concurrent call doesn't queue, and it doesn't share time with the first - it is rejected immediately:

    Exception in thread Thread-2 (_call):
    Traceback (most recent call last):
    File "/usr/local/lib/python3.14/concurrent/interpreters/__init__.py", line 226, in _call
    res, excinfo = _interpreters.call(self._id, callable, args, kwargs, restrict=True)
    concurrent.interpreters.InterpreterError: interpreter already running

    I confirmed the shape of this with three variants of the same interpreter, run in sequence:

    scenariotimeoutcomeone call0.84sfinetwo sequential calls, same interpreter1.63sfine, roughly 2xtwo concurrent calls, same interpreter0.84s wall-clocksecond call raises InterpreterError


    interpreters.create() is documented as returning "a new (idle) Python interpreter", and that word is accurate: idle or running, nothing in between. If you want N things running at once, you need N interpreters, one each. A thread pool aimed at a single shared interpreter - the pattern every ThreadPoolExecutor tutorial uses with regular threads - does not translate. You get one interpreter's worth of work and an exception, not graceful serialisation.

    The opposite number: interpreters are not obviously cheaper to start than processes


    The other assumption I walked in with was that subinterpreters, being lighter than OS processes, would be cheap to spin up. I measured the cost of creating four workers and giving each one some real state (a 200,000-element list), steady state after the first warm-up run:

    approachcreate + populate, 4 workersfork (Python 3.13's Linux default)0.037 - 0.038sforkserver (Python 3.14's Linux default)0.057 - 0.065s4 subinterpreters0.076 - 0.078s


    Creating four subinterpreters and running a small amount of code in each took about twice as long as a classic fork-based process pool, and somewhat longer than the new forkserver default too. None of this matters once the work inside each worker takes more than a few milliseconds - the 3.6s-versus-0.9s number above swallows an 80-millisecond setup cost without noticing. But it means "subinterpreters are lighter than processes" is not something I could verify at creation time; the saving, where it exists, is in not forking a second copy of the process's address space, not in any faster start.

    That forkserver row was an accident. I wrote a timing script that called multiprocessing.Process(...).start() directly from the module's top level, the way plenty of tutorial code still does, and it crashed:

    RuntimeError:
    An attempt has been made to start a new process before the
    current process has finished its bootstrapping phase.

    Checking multiprocessing.get_start_method() explained it: Python 3.14 changed the default start method on Linux from fork to forkserver. Python 3.13 reports fork; 3.14 reports forkserver. forkserver re-imports your module in the child, which is exactly the thing if __name__ == "__main__": exists to guard against, and which fork never required you to bother with. Every piece of multiprocessing code I'd written without that guard over the years happened to work by accident, on Linux, until this release. It's a one-line fix, but it is a real break, and it landed in the same release that gives you an alternative that doesn't have this problem at all.

    What it costs: closing an interpreter doesn't give the memory back


    I ran four rounds of "create four interpreters, give each a 200,000-element list, close them", watching my own process's RSS the whole time:

    round 1: 16920 -> 55648 KB
    round 2: 55648 -> 57140 KB
    round 3: 57140 -> 59476 KB
    round 4: 59476 -> 61096 KB

    .close() does finalise the interpreter - a destroyed interpreter can't be called again, and I checked that it raises if you try - but the process's resident memory never drops back to where it started. It flattens out (each later round adds less than the first) rather than growing without bound, which looks like CPython's allocator holding onto freed arenas rather than a genuine leak, but I didn't chase that further. If you're planning to cycle through many short-lived interpreters inside one long-running process, budget for that memory to stay resident, not to be returned to the OS the way a finished process's memory is.

    What's actually shareable between interpreters


    Subinterpreters don't share objects by default - that is the entire point, it's what lets them skip the GIL - so most interesting values need to cross a boundary. is_shareable() gives a yes/no answer per type:

    int -> True
    str -> True
    bytes -> True
    None -> True
    bool -> True
    tuple of ints -> True
    float -> True
    list -> False
    dict -> False

    Passing a threading.Lock as an argument to Interpreter.call() fails immediately, with the repr of the offending object right there in the message:

    NotShareableError: (<unlocked _thread.lock object at 0x7f61b8b5add0>,) does not support cross-interpreter data

    An ordinary custom class instance fails the same way, with a flatter message:

    NotShareableError: object does not support cross-interpreter data

    But the cross-interpreter Queue that the same module provides does not enforce this. I put a plain custom-class instance onto a queue and it went through without complaint, and came back out as a distinct, working object with the same attribute values - the queue silently pickles and unpickles it:

    q = interpreters.create_queue()
    q.put(Thing()) # no error
    received = q.get()
    # received is not the original object, but received.value is unchanged

    So "not shareable" is enforced differently depending on how the object crosses over. A direct argument to call() is checked against the strict shareable-types list and rejected on the spot. The same object dropped into a Queue gets the softer treatment the docs describe for put(): pickled going in, unpickled coming out as a new, unrelated object. If your code passes data between interpreters by argument, moving it to a queue instead buys you a much larger set of types - at the cost of identity and, for anything mutable, of staying in sync with the original.

    What I got wrong on the way


    My first attempt at the shareability tests put several checks in one script with no if __name__ == "__main__": guard, calling interp.call() with a mix of shareable and non-shareable arguments one after another. Running it printed every result twice, and the second copy sometimes disagreed with the first about which error got raised. My best explanation, which I didn't fully verify, is that call()'s documented pickle fallback needs to resolve names against the target interpreter's own __main__, and since that interpreter had never run my module, resolving anything defined at module level meant running the whole module there first - silently re-executing my test file a second time, inside the subinterpreter, with its own fresh state. Splitting each check into its own small script with a proper __main__ guard made every result reproducible, which is what's reported above. I'd treat any subinterpreter test that imports a lot of top-level code as suspect until it survives being run twice.

    Run it yourself


    This needs Python 3.14 and four-ish cores to see the gap clearly. I ran it in Docker because that's the fastest way to get an exact version:

    docker pull python:3.14-slim

    The core benchmark:

    # bench.py
    import time, threading, sys

    def cpu_work(n):
    count = 0
    for i in range(2, n):
    is_prime = True
    for d in range(2, int(i ** 0.5) + 1):
    if i % d == 0:
    is_prime = False
    break
    if is_prime:
    count += 1
    return count

    def run_threads(n, workers):
    threads = [threading.Thread(target=cpu_work, args=(n,)) for _ in range(workers)]
    t0 = time.perf_counter()
    for t in threads: t.start()
    for t in threads: t.join()
    print(f"threads={workers}: {time.perf_counter()-t0:.3f}s")

    def run_interpreters(n, workers):
    import concurrent.interpreters as interpreters
    interps = [interpreters.create() for _ in range(workers)]
    t0 = time.perf_counter()
    threads = [i.call_in_thread(cpu_work, n) for i in interps]
    for t in threads: t.join()
    print(f"interpreters={workers}: {time.perf_counter()-t0:.3f}s")
    for i in interps: i.close()

    if __name__ == "__main__":
    mode, n, workers = sys.argv[1], int(sys.argv[2]), int(sys.argv[3])
    {"threads": run_threads, "interpreters": run_interpreters}[mode](n, workers)

    docker run --rm -v "$PWD":/w -w /w python:3.14-slim python3 bench.py threads 400000 4
    docker run --rm -v "$PWD":/w -w /w python:3.14-slim python3 bench.py interpreters 400000 4

    And the refusal, which needs no setup at all:

    docker run --rm python:3.14-slim python3 -c "
    import concurrent.interpreters as interpreters
    i = interpreters.create()
    t1 = i.call_in_thread(lambda: __import__('time').sleep(1))
    t2 = i.call_in_thread(lambda: __import__('time').sleep(1))
    t1.join(); t2.join()
    "

    What to do with this


    If you have a CPU-bound Python workload that multiprocessing already parallelises well, subinterpreters aren't an obvious upgrade yet: on this release they start up slower than a plain fork and about the same as forkserver, and you still need one interpreter per concurrent task, with no pooling against a single interpreter. Where they're worth trying now is the code that currently reaches for a thread, because threading is simpler to wire up than multiprocessing, and then quietly gets nothing from the GIL: swap the Thread for an Interpreter.call_in_thread, and check your data either fits the shareable-types list or is willing to cross as a pickled copy through a Queue. And if you have multiprocessing code anywhere that starts a Process without an if __name__ == "__main__": guard, fix that first - 3.14 will find it on Linux even if nothing else in this post applies to you.#python #performance #programming #devops #software #coding #development #engineering #inclusive #community
    Python 3.14's concurrent.interpreters module turns a 3.6-second GIL bottleneck into 0.9 seconds

  22. Centerledaren Elisabeth Thand Ringqvist har misslyckats med att samla stöd för en mittenregering. Nu tar talmannen Andreas Norlén över arbetet igen och ska kontakta partierna per telefon för att diskutera nästa steg i regeringsbildningen.#Valet2026
    Thand Ringqvist misslyckas – så går regeringsbildningen vidare
Share on Mastodon

Enter the server where you have an account.