Table of Contents

May 2025 Update

We are excited to release the first version of Flow with support for AI workloads powered by Azure and OpenAI! This AI-centered release focuses on:

  • Accessing information in business documents through semantic search, AI chat, and AI agents
  • Building document stores for RAG (Retrieval-Augmented Generation) and semantic search
  • Creating AI chat clients
  • Automating tasks with AI agents

Adobe PDF Services

Flow now integrates Adobe PDF Services to easily convert PDF files into:

  • Word (.docx)
  • Excel (.xlsx)
  • PowerPoint (.pptx)
  • RTF (.rtf)

PDF files need to be converted into machine-readable formats (e.g., Markdown) to be usable by LLMs and other information retrieval systems. You can combine the Adobe PDF Services converter action with a Markdown converter action for optimal compatibility.

img


AI Tools Agent

The Tools AI Agent allows for autonomous AI-powered automations. Example:

  • Gather data from internal systems
  • Compose a report
  • Post the report to Microsoft Teams

The LLM-powered "brain" decides which tools to use and how to execute the task.

Read more here

img


AI Agent Tools

Tools enables building AI-powered automations using AI Agents that, given a set of tools, can operate autonomously to complete tasks. These tools help build AI-powered automations:


Azure Storage Blob Agent Tool

  • Access Azure Blob Storage
  • Read and write files

Read more here


OneDrive Agent Tool

  • Access OneDrive on behalf of a user
  • List, read, upload, and delete files

Read more here


Outlook Agent Tool

  • Send emails via Outlook

Read more here


Markdown Agent Tool

  • Convert Word, PowerPoint, PDF, CSV, Excel to Markdown
  • Useful for summarizing and interpreting documents

Read more here


AI Chat – Azure OpenAI

Chat Completion

  • Returns a response from an Azure OpenAI chat model (LLM)
  • Use case: Chat clients like ChatGPT, reasoning over documents

img


Streaming Chat Completion

  • Streams response as it's generated (ideal for chat backends)

img


Generate Embedding

  • Converts text to embedding vector for vector search or vector store (e.g., SQL Server, PostgreSQL)

Read more here


Chat Model

Read more here


Text Embedder

  • The Text embedder is a tool used by actions such as the PostgreSQL Vector search action to generate embedding vectors on demand. The action chooses when and if to use the tool.

The difference between the Text embedder tool and the Generate embedding action, is that the Text embedder tool is used by other actions if they choose to, while the Generate embedding action runs explicitly.


AI Chat – OpenAI

Same features as Azure OpenAI:


AI Chat – Common

Chat History Truncation Reducer

  • Removes items from chat history before sending to the LLM
  • Helps reduce token usage and improve accuracy

The Chat history truncation reducer is used to limit the amount of data processed by an LLM by removing items from the chat history before it is sent as part of the prompt. Reducing the input to an LLM may positively affect the accuracy of the response, and reduce cost because fewer tokens are used.

img

PostgreSQL


Search Vectors

This action performs a vector search against a PostgreSQL table and returns the matching records. It is typically used when you want to find similar items based on meaning or characteristics, rather than exact matches. Common use cases includes

  • Semantic search: Retrieving documents, web pages, or support articles that are semantically similar to a user’s query, even if they don’t share the same keywords.

  • Recommendation systems: Suggesting similar products, movies, songs, etc., by comparing vector representations of items and user preferences.

A concrete example for using the vector search action is when building RAG-based pipelines, where you are using an LLM to answer questions or reason about text. For this, you will do a semantic search for the question asked by the user, and then feed the result of the search + the user question to the LLM.

img

Markdown

Markdown is a lightweight plain-text formatting language used to create structured documents using simple syntax (e.g., # for headings, * for bullets, backticks for code). It is easy to read, write, parse, and generate, making it ideal for LLMs and AI-enabled workloads.

The following actions are supported:

Convert URL to Markdown

Converts the HTML content of a web page into Markdown format.
Read more here.

Convert HTML to Markdown

Converts HTML to Markdown using the MarkItDown library from Microsoft.
Read more here.

Convert a PDF file to Markdown

Converts a PDF file to Markdown using the MarkItDown library from Microsoft.
Read more here.

Convert an Excel file to Markdown

Converts an Excel file to Markdown using the MarkItDown library from Microsoft.
Read more here.

Convert a Word file to Markdown

Converts a Word file to Markdown using the MarkItDown library from Microsoft.
Read more here.

Convert a PowerPoint file to Markdown

Converts a PowerPoint file to Markdown using the MarkItDown library from Microsoft.
Read more here.

img


GitHub

We have added support for reading files and file information from GitHub repositories. This enables using Flow for workloads involving pulling resources from GitHub, for example deploying Spark Jobs or Notebooks to Microsoft Fabric as part of deploying data integration solutions.

For each content info

This action iterates over file and folder information in a GitHub repository. Note that it does not download any files. You will typically use this action to list items, and then conditionally download the ones you are after.
Read more here.

Read content as byte array

This action reads a file from GitHub as a byte array (binary format, can be used multiple times).
Read more here.

Read contents as stream

This action reads a file from GitHub as a stream (read once, forward only, best performance).
The difference between reading a file as stream or byte array is that a stream can only be read once. If you need to perform multiple operations on the same file, use the byte array option.
Read more here.

img


HTML

We’ve added basic support for web scraping, which enables automating retrieval of information from web sites for analysis or storing to files or databases.

img


For each HTML element

This action supports iterating over HTML elements in an HTML document or HTML fragment. You can use this action when doing web scraping to get contents of a web site, and you need to extract data from only specific sections of the web pages.
Read more here.

Replace relative with absolute URLs

This action replaces relative URLs in an HTML document or element with absolute URLs.
A typical use case for this action is storing information from a website (such as an internal knowledge base) in a vector database used for RAG by an AI chat. Links to topics are often stored as URLs relative to the original site. However, when an LLM replies with information from the RAG lookup, the response is no longer in the context of the original website, so relative links are broken.
Read more here.


HTTP

Get sitemap

This action retrieves the sitemap from a given URL and returns a structured list of entries, including metadata for each page. It is typically used as a starting point for scraping pages on the website.
Read more here.


Vector data

Split text

The Split text action breaks large blocks of text into smaller, manageable chunks. This is especially useful in natural language processing tasks, where models have input size limits or where splitting improves performance. Text splitters typically aim to preserve semantic meaning by splitting at logical boundaries like sentences or paragraphs.

When using Flow to populate a vector database with text from sources like documents or websites, use the Text Splitter to break large blocks of text into smaller chunks before generating embeddings and storing them in the database.

img


Chat completion trigger

The Chat completion trigger defines the entry point for a Flow that executes an AI chat completion request.

You’ll typically use this trigger when you want to implement a Flow that serves as the backend for an interactive chat, allowing users to have a conversation with an AI by asking questions and follow-up questions. The trigger also provides a context property, allowing arbitrary data to be passed to the Flow to use for filtering or other types of business logic, supporting features such as RAG to help the LLM generate more relevant responses.
Read more here.

img


JSON

JsonDataReader – handle arrays

The JsonDataReader API, including the Get JSON DataReader action, now reads array fields as raw strings instead of ignoring them. This feature enables working with JSON data that contains one-to-many relationships, such as transactions and transaction details (like orders and order lines).
Read more here.


InVision

Refresh Table artifacts

This action refreshes artifacts associated with InVision Tables.

You must use this action if you modify data in Tables using a SQL Script or other methods that directly manipulate the database table, instead of using InVision or Flow APIs.
You don’t have to use this action when updating InVision Tables using the built-in data import APIs or when users update data through the UI.
Read more here.


CSV

Support for parameterization of CSV export and import options (Advanced)

We now support parameterization of the CSV export and import options (such as row delimiter, quote character, thousand separator, date format string, etc), to enable apps such as Planner to create custom UIs for CSV data export and import jobs.


Core

Streaming

Profitbase Flow now supports streaming the result back to a client while executing. This enables clients to start processing data as soon as it becomes available, instead of having to wait until the Flow has completed the entire task. A typical use case of this feature is to build AI chat clients, where the response from the LLM is streamed back in chunks as it becomes available.
Read more here.

Yield break

The yield break action signals the end of an iteration in an iterator. When a client receives this signal, it knows that no more items are returned.
Read more here.

Yield return

Yield return provides the next value of an iteration in an iterator – in other words, it returns the current chunk of a response. When there is no more data to yield back to the client, yield break signals the end of the response.
Read more here.

img


Run Flow – Parameterizable target Flow

When using the Run Flow action, you can now parameterize which Flow to run, enabling creating more general-purpose and composable Flows.


See Also