Enable javascript in your browser for better experience. Need to know to enable it? Go here.
Volume 31 | October 2024

Languages & Frameworks

  • Languages & Frameworks

    Adopt Trial Assess Hold Adopt Trial Assess Hold
  • New
  • Moved in/out
  • No change

Languages & Frameworks

Adopt ?

  • 75. dbt

    We continue to see dbt as a strong, sensible option for implementing data transformations in ELT pipelines. We like that it lends itself to engineering rigor and enables practices like modularity, testability and reusability of SQL-based transformations. dbt integrates well with many cloud data warehouses, lakehouses and databases — including Snowflake, BigQuery, Redshift, Databricks and Postgres — and has a healthy ecosystem of community packages surrounding it. The native support it recently introduced (in dbt core 1.8+ and the recently introduced dbt Cloud "versionless" experience) for unit testing further strengthens its position in our toolbox. Our teams appreciate that the new unit testing feature allows them to easily define static test data, set up output expectations and test both incremental and full-refresh modes of their pipelines. In many cases, this has allowed them to retire homegrown scripts while maintaining the same level of quality.

  • 76. Testcontainers

    In our experience, Testcontainers are a useful default option for creating a reliable environment for running tests. It's a library, ported to multiple languages, that Dockerizes common test dependencies — including various types of databases, queuing technologies, cloud services and UI testing dependencies like web browsers — with the ability to run custom Dockerfiles when needed. Recently, a desktop version was released that allows for the visual management of test sessions and the ability to manage more complex scenarios which our teams have found very useful.

Trial ?

  • 77. CAP

    CAP is a .NET library that implements the Outbox pattern. When working with distributed messaging systems like RabbitMQ or Kafka, we frequently face the challenge of ensuring that database updates and event publications are performed atomically. CAP addresses this challenge by recording the intent to publish the event in the same database transaction that caused the event. We find CAP to be quite useful as it supports several databases and messaging platforms while guaranteeing at-least-once delivery.

  • 78. CARLA

    CARLA is an open-source simulator for autonomous driving research used to test autonomous driving systems before production deployment. It offers flexibility in creating and reusing 3D models of vehicles, terrain, humans, animals and more, making it possible to simulate scenarios like a pedestrian stepping onto the street or encountering an oncoming vehicle at a specific speed. The autonomous driving system under test must recognize these dynamic actors and take appropriate action — such as braking. Our teams use CARLA for the ongoing development and testing of autonomous driving systems.

  • 79. Databricks Asset Bundles

    Databricks Asset Bundles (DABs), which reached general availability in April 2024, is becoming the go-to tool for packaging and deploying Databricks assets that facilitates the adoption of software engineering practices in our data teams. DABs supports packaging the configuration of workflows and tasks, as well as the code to be executed in those tasks, as a bundle that can be deployed to multiple environments through CI/CD pipelines. It comes with templates for common types of assets and supports custom templates, which allows for the creation of tailored service templates for data engineering and ML projects. Our teams have increasingly adopted it as a key part of their engineering workflows. Even though DABs includes templates for notebooks and supports deploying them to production, we don't recommend productionizing notebooks and instead encourage intentionally writing production code with the engineering practices that support the maintainability, resiliency and scalability needs of such workloads.

  • 80. Instructor

    When we use large language model (LLM) chatbots as end users, they usually come back to us with an unstructured natural language answer. When building GenAI applications that are more than chatbots, it can be useful to ask the LLM for a structured answer in JSON, YAML or other formats, and then parse and use that response in the application. However, as LLMs are nondeterministic, they might not always do what we ask them to do. Instructor is a library that can be used to help us request structured output from LLMs. You can define the intended output structure and configure retries if the LLM doesn't return the structure you asked for. As the best end user experience for working with LLMs is often to stream the results to them instead of waiting for the full response, Instructor also takes care of parsing partial structures from a stream.

  • 81. Kedro

    Kedro has significantly improved as a tool for MLOps and has maintained its focus on modularity and engineering practices, which we liked from the start. One step that highlights its modularity is the introduction of the standalone kedro-datasets package, which decouples code from data. Kedro has added enhancements in its CLI, starter project templates and telemetry capabilities. Additionally, the recent release of a VS Code extension is a good boost to the developer experience.

  • 82. LiteLLM

    LiteLLM is a library for seamless integration with various large language model (LLM) providers' APIs that standardizes interactions through an OpenAI API format. It supports an extensive array of providers and models and offers a unified interface for completion, embedding and image generation. LiteLLM simplifies integration by translating inputs to match each provider's specific endpoint requirements. It also provides a framework needed to implement many of the operational features needed in a production application such as caching, logging, rate limiting and load balancing. This ensures uniform operation across different LLMs. Our teams are using LiteLLM to make it easier to swap various models in and out — a necessary feature in today's landscape where models are evolving quickly. It's crucial to acknowledge when doing this that model responses to identical prompts vary, indicating that a consistent invocation method alone may not fully optimize completion performance. Also, each model implements add-on features uniquely and a single interface may not suffice for all. For example, one of our teams had difficulty taking advantage of function calling in an AWS Bedrock model while proxying through LiteLLM.

  • 83. LlamaIndex

    LLamaIndex includes engines that enable you to design domain-specific, context-augmented LLM applications and support tasks like data ingestion, vector indexing and natural language question-answering on documents, to name a few. Our teams used LlamaIndex to build a retrieval-augmented generation (RAG) pipeline that automates document ingestion, indexes document embeddings and queries these embeddings based on user input. Using LlamaHub, you can extend or customize LlamaIndex modules to suit your needs and build, for example, LLM applications with your preferred LLMs, embeddings and vector store providers.

  • 84. LLM Guardrails

    LLM Guardrails is a set of guidelines, policies or filters designed to prevent large language models (LLMs) from generating harmful, misleading or irrelevant content. The guardrails can also be used to safeguard LLM applications from malicious users attempting to misuse the system with techniques like input manipulation. They act as a safety net by setting boundaries for the model to process and generate content. There are some emerging frameworks in this space like NeMo Guardrails, Guardrails AI and Aporia Guardrails our teams have been finding useful. We recommend every LLM application have guardrails in place and that its rules and policies be continuously improved. Guardrails are crucial for building responsible and trustworthy LLM chat apps.

  • 85. Medusa

    In our experience, most e-commerce solutions for building shopping websites usually fall into the 80/20 trap — we can easily build 80% of what we want but can't do anything about the remaining 20%. Medusa offers a good balance. It's a highly customizable open-source commerce platform that allows developers to create unique and tailored shopping experiences that can be self-hosted or run on Medusa’s platform. Built on Next.js and PostgreSQL, Medusa accelerates the development process with its comprehensive range of modules — from basic shopping cart and order management to advanced features like gift card modules and tax calculation for different regions. We've found Medusa to be a valuable framework and applied it to a few projects.

  • 86. Pkl

    Pkl is an open-source configuration language and tooling initially created for use internally at Apple. Its key feature is its type and validation system, allowing configuration errors to be caught prior to deployment. Pkl has enabled our teams to reduce code duplication (for cases such as environment overrides) and perform validation before configuration changes are applied to live environments. It generates JSON, PLIST, YAML and .properties files and has extensive IDE and language integration, including code generation.

  • 87. ROS 2

    ROS 2 is an open-source framework designed for the development of robotic systems. It provides a set of libraries and tools that enable the modular implementation of applications, covering functions like inter-process communication, multithreaded execution and quality of service. ROS 2 builds on its predecessor by providing improved real-time capabilities, better modularity, increased support for diverse platforms and sensible defaults. ROS 2 is gaining traction in the automotive industry; its node-based architecture and topic-based communication model are especially attractive for manufacturers with complex, evolving in-vehicle applications, such as autonomous driving functionality.

  • 88. seL4

    In software-defined vehicles (SDV) or other safety-critical scenarios, the real-time stability of the operating system is crucial. A few companies monopolize this field due to its high entry barriers, so open-source solutions like seL4 are precious. seL4 is a high-assurance, high-performance operating system microkernel. It uses formal verification methods to "mathematically" ensure the operating system's behavior complies with the specification. Its microkernel architecture also minimizes core responsibilities to ensure system stability. We've seen EV companies like NIO engage with the seL4 ecosystem, and there may be more development in this area in the future.

  • 89. SetFit

    Most of the current crop of AI-based tools are generative — they generate text and images and use generative pre-trained transformers (GPTs) to do so. For use cases that require working with existing text — to classify pieces of text or to determine intent — sentence transformers are the tool of choice. In this field, SetFit is a framework for fine-tuning sentence transformers. We like SetFit because it uses contrastive learning to separate different intent classes from each other, often achieving clear separation with a very small number of examples, even 25 or less. Sentence transformers can also play a role in a generative AI system. We've successfully used SetFit for intent detection in a customer-facing chatbot system that uses an LLM, and even though we're aware of OpenAI's moderation API, we chose a classifier based on SetFit to perform additional fine-tuning to achieve stricter filtering.

  • 90. vLLM

    vLLM is a high-throughput, memory-efficient inference engine for LLMs that can run in the cloud or on-premise. It seamlessly supports multiple model architectures and popular open-source models. Our teams deploy dockerized vLLM workers on GPU platforms like NVIDIA DGX and Intel HPC, hosting models such as Llama 3.1(8B and 70B), Mistral 7B and Llama-SQL for developer coding assistance, knowledge search and natural language database interactions. vLLM is compatible with the OpenAI SDK standard, facilitating consistent model serving. Azure's AI Model Catalog uses a custom inference container to enhance model serving performance, with vLLM as the default inference engine due to its high throughput and efficient memory management. The vLLM framework is emerging as a default for large-scale model deployments.

Assess ?

  • 91. Apache XTable™

    Entre os formatos de tabela abertos disponíveis que possibilitam lakehouses — como Apache Iceberg, Delta e Hudi — ainda não surgiu um vencedor. Em vez disso, identificamos ferramentas que possibilitam a interoperabilidade entre esses formatos. Delta UniForm, por exemplo, permite interoperabilidade unidirecional, possibilitando que clientes Hudi e Iceberg leiam tabelas Delta. Outro novo participante nesse espaço é o Apache XTable™, um projeto incubado pela Apache que facilita a interoperabilidade omnidirecional entre Hudi, Delta e Iceberg. Assim como o UniForm, ele converte metadados entre esses formatos sem criar uma cópia dos dados subjacentes. O XTable pode ser útil para equipes que estão experimentando com múltiplos formatos de tabela. No entanto, para uso a longo prazo, dadas as diferenças nas funcionalidades desses formatos, depender fortemente da interoperabilidade omnidirecional pode fazer com que as equipes acabem utilizando apenas o denominador comum de funcionalidades.

  • 92. dbldatagen

    Preparar dados de teste para engenharia de dados é um desafio significativo. Transferir dados do ambiente de produção para ambientes de teste pode ser arriscado, então as equipes muitas vezes dependem de dados falsos ou sintéticos. Neste Radar, exploramos abordagens inovadoras como dados sintéticos para teste e treinamento de modelos. Mas, na maioria das vezes, a geração procedural de baixo custo é suficiente. O dbldatagen (Databricks Labs Data Generator) é uma dessas ferramentas; é uma biblioteca Python para gerar dados sintéticos no ambiente Databricks para testes, benchmarks, demonstrações e outros usos. dbldatagen pode gerar dados sintéticos em grande escala, até bilhões de linhas em minutos, suportando vários cenários como múltiplas tabelas, captura de dados alterados e operações de mesclagem/junção. Ele lida bem com os tipos primitivos do Spark SQL, gera intervalos e valores discretos, além de aplicar distribuições específicas. Ao criar dados sintéticos usando o ecossistema Databricks, o dbldatagen é uma opção que vale a pena avaliar.

  • 93. DeepEval

    DeepEval é um framework de código aberto, baseado em Python, de avaliação do desempenho de LLMs. Você pode utilizar para avaliar a geração aumentada por recuperação (RAG) e outros tipos de aplicativos feitos com frameworks populares como LlamaIndex ou LangChain, bem como para estabelecer uma linha de base e benchmark quando você está comparando diferentes modelos para as suas necessidades. DeepEval oferece um conjunto abrangente de métricas e recursos para avaliar o desempenho de LLMs, incluindo detecção de alucinação, relevância de respostas e otimização de hiperparâmetros. Ele oferece integração com pytest e, além dessas asserções, você pode facilmente integrar a suíte de testes em uma pipeline de integração contínua. Se você está trabalhando com LLMs, considere experimentar o DeepEval para melhorar seu processo de testes e garantir a confiabilidade de suas aplicações.

  • 94. DSPy

    A maioria das aplicações baseadas em modelos de linguagem hoje depende de modelos de prompt ajustados manualmente para tarefas específicas. DSPy, um framework para desenvolver tais aplicações, adota uma abordagem diferente que dispensa a engenharia direta de prompts. Em vez disso, ele introduz abstrações de alto nível orientadas ao fluxo do programa através de módulos que podem ser sobrepostos, métricas para otimizar e dados para treinar/testar. Em seguida, otimiza os prompts e/ou pesos do modelo de linguagem subjacente com base nessas métricas definidas. O código resultante se assemelha muito ao treinamento de redes neurais com PyTorch. Achamos a abordagem que eles adotam inovadora por sua perspectiva diferente e acreditamos que vale a pena experimentar.

  • 95. Flutter para Web

    O Flutter é conhecido por seu suporte multiplataforma para aplicativos iOS e Android. Agora, ele se expandiu para mais plataformas. Avaliamos anteriormente o Flutter para Web — que nos permite construir aplicativos para iOS, Android e navegadores a partir da mesma base de código. Nem toda aplicação web faz sentido em Flutter, mas acreditamos que ele é particularmente adequado para casos como aplicativos web progressivos, aplicativos de página única e para a conversão de aplicativos móveis Flutter já existentes para a web. O Flutter já oferecia suporte ao WebAssembly (WASM) como um alvo de compilação em seu canal experimental, o que significava que estava em desenvolvimento ativo com possíveis bugs e problemas de performance. As versões mais recentes o tornaram estável. O desempenho das aplicações web em Flutter compiladas para o alvo WASM é muito superior ao de sua compilação para JavaScript. O desempenho quase nativo em diferentes plataformas é também uma das razões pelas quais muitas desenvolvedoras escolhem o Flutter inicialmente.

  • 96. kotaemon

    kotaemon é uma ferramenta e framework de código aberto baseada em RAG para desenvolver aplicativos de perguntas e respostas para documentos de base de conhecimento. Ele pode entender vários tipos de documentos, incluindo formatos PDF e DOC, e oferece uma interface web, baseada no Gradio, que permite às usuárias organizar e interagir com uma base de conhecimento por meio de chat. Ele possui pipelines RAG integradas com armazenamento de vetores e pode ser estendido com SDKs. O kotaemon também referencia os documentos fonte em suas respostas, além de fornecer pré-visualização na web e um pontuação de relevância. Para quem deseja criar uma aplicação de perguntas e respostas baseado em RAG, o framework personalizável é um ótimo ponto de partida.

  • 97. Lenis

    Lenis é uma biblioteca de rolagem suave, leve e poderosa, projetada para navegadores modernos. Ela permite experiências de rolagem suave, como sincronização de rolagem WebGL e efeitos de paralaxe, tornando-a ideal para equipes que criam páginas com interações de rolagem fluidas e contínuas. Nossas desenvolvedoras acharam Lenis simples de usar, oferecendo uma abordagem simplificada para criar rolagens suaves. No entanto, a biblioteca pode ter problemas de acessibilidade, principalmente com interações de rolagem vertical e horizontal, podendo confundir usuárias com deficiências. Embora visualmente atrativa, ela precisa de uma implementação cuidadosa para manter a acessibilidade.

  • 98. LLMLingua

    LLMLingua melhora a eficiência de LLMs ao comprimir prompts usando um pequeno modelo de linguagem para remover tokens não essenciais com perda mínima de desempenho. Essa abordagem permite que LLMs mantenham a capacidade de raciocínio e aprendizado contextual, enquanto processam prompts mais longos de forma eficiente, abordando desafios como eficiência de custos, latência de inferência e manejo de contexto. Compatível com vários LLMs sem necessidade de treinamento adicional e suportando frameworks como LLamaIndex, o LLMLingua é ideal para otimizar o desempenho de inferência de LLMs.

  • 99. Microsoft Autogen

    Microsoft Autogen é um framework de código aberto que simplifica a criação e orquestração de agentes de IA, permitindo a colaboração multi-agentes para resolver tarefas complexas. Ele suporta tanto fluxos autônomos quanto fluxos com interação humana, ao mesmo tempo que oferece compatibilidade com uma variedade de modelos de linguagem de grande escala (LLMs) e ferramentas para interação de agentes. Um de nossos times utilizou Autogen para uma cliente para construir uma plataforma com IA onde cada agente representava uma habilidade específica, como geração de código, revisão de código ou resumo de documentação. O framework permitiu que a equipe criasse novos agentes de forma contínua e consistente, definindo o modelo e o fluxo de trabalho corretos. Eles utilizaram o LlamaIndex para orquestrar o fluxo de trabalho. Embora o Autogen tenha se mostrado promissor, especialmente em ambientes de produção, ainda há preocupações em relação à escalabilidade e ao gerenciamento da complexidade à medida que mais agentes são adicionados. Uma avaliação mais aprofundada é necessária para avaliar sua viabilidade a longo prazo no escalonamento de sistemas baseados em agentes.

  • 100. Pingora

    Pingora é um framework Rust para criar serviços de rede rápidos, confiáveis e programáveis. Originalmente desenvolvido pela Cloudflare para resolver as deficiências do Nginx, o Pingora vem demonstrando um grande potencial, pois proxies mais novos, como o River, estão sendo criados com base nele. Embora a maioria de nós não enfrente um nível de escala como a do Cloudflare, encontramos cenários em que o roteamento flexível da camada de aplicativos é essencial para nossos serviços de rede. A arquitetura do Pingora nos permite aproveitar todo o poder do Rust nessas situações sem abandonar segurança ou desempenho.

  • 101. Ragas

    Ragas é um framework projetado para avaliar o desempenho de pipelines de geração aumentada por recuperação (RAG), que endereça o desafio de avaliar tanto os componentes de recuperação quanto de geração nesses sistemas. Ele fornece métricas estruturadas como fidelidade, relevância das respostas e utilização de contexto, que ajudam a avaliar a eficácia dos sistemas baseados em RAG. Nossas desenvolvedoras acharam o framework útil para realizar avaliações periódicas, com o objetivo de ajustar parâmetros como recuperações top-k e modelos de embedding. Algumas equipes integraram o Ragas em pipelines que são executados diariamente, sempre que o template do prompt ou o modelo muda. Embora suas métricas ofereçam insights sólidos, temos receio de que o framework possa não capturar todas as nuances e interações complexas dos pipelines RAG, e recomendamos considerar frameworks adicionais de avaliação. No entanto, Ragas se destaca por sua capacidade de simplificar a avaliação de RAG em ambientes de produção, oferecendo melhorias valiosas baseadas em dados.

  • 102. Score

    Muitas organizações que implementam suas próprias plataformas de desenvolvimento internas tendem a criar seus próprios sistemas de orquestração de plataforma para impor padrões organizacionais entre desenvolvedoras e suas equipes de hospedagem de plataforma. No entanto, as características básicas de uma plataforma de implantação de caminho pavimentado para hospedar cargas de trabalho em contêineres de maneira segura, consistente e compatível são semelhantes de uma organização para outra. Não seria bom se tivéssemos uma linguagem compartilhada para especificar esses requisitos? Score está demonstrando a promessa de se tornar um padrão neste espaço. É uma linguagem declarativa na forma de YAML que descreve como uma carga de trabalho em contêiner deve ser implantada e quais serviços e parâmetros específicos ela precisará para funcionar. Score foi originalmente desenvolvido pela Humanitec como a linguagem de configuração para seu produto Platform Orchestrator, mas agora está sob custódia da Cloud Native Computing Foundation (CNCF) como um projeto de código aberto. Com o apoio da CNCF, Score tem o potencial de ser mais amplamente utilizado além do produto Humanitec. Foi lançado com duas implementações de referência: Kubernetes e Docker Compose. A extensibilidade do Score esperançosamente levará a contribuições da comunidade para outras plataformas. Score certamente tem uma semelhança com a especificação modelo de aplicação aberto (OAM) para Kubevela, mas está mais focado na implantação de cargas de trabalho em contêineres do que no aplicativo inteiro. Também há uma sobreposição com SST, mas o SSI está mais preocupado com a implantação diretamente em uma infraestrutura de nuvem do que em uma plataforma de engenharia interna. Estamos observando o Score, com interesse, à medida que ele evolui.

  • 103. shadcn

    shadcn desafia o conceito tradicional de bibliotecas de componentes ao oferecer componentes reutilizáveis no estilo "copia-e-cola" que se tornam parte da sua base de códigos. Essa abordagem concede às equipes total propriedade e controle, permitindo uma customização e extensão mais fácil — áreas onde bibliotecas convencionais mais populares como MUI e Chakra UI frequentemente ficam aquém. Construído com Radix UI e Tailwind CSS, o shadcn se integra de forma simples em qualquer aplicação baseada em React, tornando-o uma boa opção para projetos que priorizam controle e extensibilidade. Ele inclui uma ferramenta de linha de comando para ajudar no processo de copiar e colar os componentes em seu projeto. Seus benefícios também incluem a redução de dependências ocultas e a prevenção de implementações fortemente acopladas, razões pelas quais o shadcn está ganhando força como uma alternativa atraente para equipes que buscam uma abordagem mais prática e adaptável para o desenvolvimento frontend.

  • 104. Slint

    Slint é um framework declarativo com interface gráfica para construir interfaces de usuário nativas para aplicativos Rust, C++ ou JavaScript. Embora seja um framework de interface multiplataforma com recursos importantes, como pré-visualização em tempo real, design responsivo de UI, integração com VS Code e uma experiência de usuária nativa, queremos destacar especialmente sua utilidade para sistemas embarcados. Equipes que desenvolvem aplicações embarcadas tradicionalmente enfrentam um número limitado de opções para desenvolvimento de interfaces, cada uma com suas próprias limitações. O Slint oferece o equilíbrio perfeito entre a experiência da pessoa desenvolvedora e o desempenho, utilizando uma linguagem de marcação fácil de usar, semelhante ao HTML, e compilando diretamente para código de máquina. Em tempo de execução, ele também possui um baixo consumo de recursos, o que é fundamental para sistemas embarcados. Em resumo, gostamos do Slint porque ele traz práticas comprovadas do desenvolvimento web e móvel para o ecossistema de sistemas embarcados.

  • 105. SST

    SST é um framework para implantação de aplicações em ambientes de nuvem juntamente com o provisionamento de todos os serviços que a aplicação precisa para ser executada. SST não é só uma ferramenta de IaC; é um framework com com uma API TypeScript que permite que você defina o ambiente de sua aplicação, um serviço que implanta sua aplicação quando acionado através de push do GIT, bem como uma interface gráfica de console para gerenciar a aplicação resultante e invocar os recursos de gerenciamento do SST. Embora o SST tenha sido originalmente baseado no AWS Cloud Formation e no CDK, sua versão mais recente foi implementada sobre o Terraform e o Pulumi. Então, na teoria, é agnóstico em relação à nuvem. O SST tem suporte nativo para a implantação de diversas estruturas de aplicativos da web padrão, incluindo Next.js e Remix, mas também oferece suporte a aplicações de API sem interface. O SST parece estar em uma categoria própria. Embora tenha alguma semelhança com ferramentas de orquestração de plataforma como o Kubevela, ele também fornece conveniências para pessoas desenvolvedoras, como um modo ao vivo que faz proxy de invocações do AWS Lambda de volta para uma função em execução na máquina local da pessoa desenvolvedora. No momento, o SST continua sendo uma curiosidade, mas é um projeto e uma categoria de ferramentas que vale a pena observar à medida que evolui.

Hold ?

No blips

Unable to find something you expected to see?

 

Each edition of the Radar features blips reflecting what we came across during the previous six months. We might have covered what you are looking for on a previous Radar already. We sometimes cull things just because there are too many to talk about. A blip might also be missing because the Radar reflects our experience, it is not based on a comprehensive market analysis.

Download the PDF

 

 

English | Español | Português | 中文

Sign up for the Technology Radar newsletter

 

Subscribe now

Visit our archive to read previous volumes