From 6ff5a6556d184e2fd1132205b524b472967def3a Mon Sep 17 00:00:00 2001 From: Manas Hejmadi Date: Wed, 27 Aug 2025 17:01:50 +0530 Subject: [PATCH] SSE & AI Requests Report Improvements --- doc/gsoc/2025/images/codecovold.png | Bin 0 -> 78501 bytes doc/gsoc/2025/manas_hejmadi.md | 101 +++++++++++++++++++++++----- 2 files changed, 84 insertions(+), 17 deletions(-) create mode 100644 doc/gsoc/2025/images/codecovold.png diff --git a/doc/gsoc/2025/images/codecovold.png b/doc/gsoc/2025/images/codecovold.png new file mode 100644 index 0000000000000000000000000000000000000000..789908d63e69a5af00be22109f9354122f001bd9 GIT binary patch literal 78501 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 z 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 T1N;mQ0oQqr3y5Mh>yZBdl7hPZ literal 0 HcmV?d00001 diff --git a/doc/gsoc/2025/manas_hejmadi.md b/doc/gsoc/2025/manas_hejmadi.md index 08a1bb5b..bf0f41ee 100644 --- a/doc/gsoc/2025/manas_hejmadi.md +++ b/doc/gsoc/2025/manas_hejmadi.md @@ -39,11 +39,8 @@ All in all, these completion of these improvements will establish apidash as a m `Associated Pull Request`: [#857](https://github.com/foss42/apidash/pull/857) Initially, the entire networking constructs that apidash relied on was fully written inside a module named `apidash_core`. -The networking code was fairly advanced including support for GraphQL, request cancellations and a lot of other good features. Howeever, as it was tightly coupled with apidash, we were unable to allow the rest of the flutter developer community to use these features. -At apidash, we believe in giving back to the open source community and hence the mentors and I decided to refactor everything into a new package. -During discussions, I came up with the name `better_networking`. We envisioned it to be the go-to package for everything related to networking for a flutter application. - -This proved to be a great decision, as we were able to separate it completely, publish it on [pub.dev](https://pub.dev/packages/better_networking), and achieve over 95% code coverage through isolated testing. +The networking code was fairly advanced including support for GraphQL, request cancellations and a lot of other good features. However, as it was tightly coupled with apidash, we were unable to allow the rest of the flutter developer community to use these features. We believe in giving back to the open source community whenever we can and hence the mentors and I decided to refactor everything into a new package. +During discussions, I came up with the name `better_networking` and we envisioned it to be the go-to package for everything related to networking for a flutter application. This is an example of how better_networking simplifies request handling @@ -69,6 +66,12 @@ final (resp, duration, err) = await sendHttpRequest( cancelHttpRequest('unique-request-id'); ``` +This proved to be a great decision, as we were able to separate it completely, publish it on [pub.dev](https://pub.dev/packages/better_networking), and achieve over 95% code coverage through isolated testing. + +Code coverage before refactor: +![Code Coverage Report](./images/codecovold.png) + +Code coverage after Refactor: ![Code Coverage Report](./images/bnetlcov.png) --- @@ -77,10 +80,15 @@ cancelHttpRequest('unique-request-id'); `Associated Pull Request`: [#861](https://github.com/foss42/apidash/pull/861) ![Code Coverage Report](./images/sse_ex1.png) -SSE Support was a long pending [issue](https://github.com/foss42/apidash/issues/116) (since 2024) and hence the mentors asked me to see if i was able to implement SSE support into `better_networking` and simultaneously into `apidash` itself. The implementations suggested by other contributors in the past involved creation of SSE as a completely new request type. -However, I did not agree with this approach as SSE is not a fundamentally separate request type like GraphQL. Hence, I wrote up a quick demo with SSE implemented within the existing apidash foundation code. The mentors were impressed with this approach as it was far more maintainable and sensible than creating new models for it. -Rewrote the original implementation of `sendHttpRequest` in terms of this new SSE handler +SSE Support was a long pending [issue](https://github.com/foss42/apidash/issues/116) (since 2024). Once I was done with the `better_networking` package creation, the mentors asked me to look into how i can implement SSE within the package and by extension into apidash. After doing some research and a review into the existing PRs by other contributors for this feature, I noticed that everyone created new Request and Response Models for SSE in code. + +However, I did not agree with this approach as SSE is just a different content-type is not a fundamentally separate request type like GraphQL. +To demonstrate this, I wrote up a quick demo with SSE baked into the existing apidash foundations. + +This new mechanism is very simple and elegant. Basically, every request in apidash is executed in streaming mode using `StreamedResponse` in dart. If the response headers specify a content-type marked as streaming, the listener remains active and statefully saves all incoming values into the sseOutput attribute of the response model. If the content-type does not match any supported streaming type, the listener terminates and the output is returned immediately. In this way, the existing request/response model can handle both Streaming and Normal HTTP Requests + +This is an example of how I rewrote the original implementation of `sendHttpRequest` in terms of this new SSE handler ```dart Future<(HttpResponse?, Duration?, String?)> sendHttpRequest( String requestId, @@ -100,6 +108,7 @@ Future<(HttpResponse?, Duration?, String?)> sendHttpRequest( return (output?.$2, output?.$3, output?.$4); } ``` +The mentors were impressed with this approach as it was far more maintainable and sensible than creating new models specifically for SSE. This way, everything stays unified and we reduce the amount of duplication --- @@ -108,19 +117,63 @@ This way, everything stays unified and we reduce the amount of duplication `Associated Pull Request`: [#870](https://github.com/foss42/apidash/pull/870) -With the rapid rise of Generative AI, it became clear that API Dash required a dedicated AI request interface with support for agentic systems. Based on this need, my mentors tasked me with developing a comprehensive AI Requests feature, along with an integrated agent building framework for future agentic integrations within the apidash application +With the rapid rise of Generative AI, it became clear that API Dash required a dedicated AI request interface with support for agentic systems. Based on this need, my mentors tasked me with developing a comprehensive AI Requests feature + +The user initiates a new request by selecting “AI”, then chooses a model and provides the required credentials through the Authorization tab. The request can be further configured by specifying system and user prompts and adjusting parameters such as `temperature`, `topP`, and `streaming or non-streaming mode`. Upon submission, the response is generated and presented either as cleaned plaintext/Markdown or in raw format, based on the user’s selection. + ![AI Requests](./images/aireq1.png) ![AI Requests](./images/aireq2.png) -The new AI Requests feature supports key capabilities such as remote model import and selection, multi-provider integration, along with support for streaming responses. +My initial implementation used tightly coupled LLM providers (e.g., gemini, openai) with specific models (e.g., gemini-2.0-flash) through hardcoded enums. These enums were directly referenced in code, which on closer review proved unsustainable. Given the rapid pace of innovation in LLMs, models become obsolete quickly, and maintaining hardcoded enums would require frequent code changes and was looking quite impractical. +Furthermore, using hardcoded enums prevents runtime dynamic loading, restricting users to only the models we explicitly provide. This limits flexibility and creates a poor experience, especially for advanced users who may need access to less common or custom models. -![LLM Provider Selector](./images/modelselector2.png) +To address this, we adopted a remote model fetch system, where model identifiers are stored in a `models.json` file within the public apidash repository. Clients fetch this file at runtime, enabling over-the-air updates to model availability. In addition, we added support for custom model identifiers directly within the ModelSelector, giving users full flexibility to configure their own models. -The newly created genai package enables users to build their own agents with features like prompt templating and more, making it simple and efficient to create powerful in-app agents. +Currently, we support several standard providers—such as Google Gemini, OpenAI, Anthropic, and Ollama—which offers a strong baseline of options while still allowing advanced customization. + +![LLM Provider Selector](./images/modelselector1.png) + +The AI Requests feature is built on top of the foundational genai package, which serves as the core layer for all AI-related functionality within apidash. +This package provides the complete set of API callers, methods, and formatters required to abstract away the complexities of interacting with AI tool APIs. By exposing a generalized interface across multiple providers, it eliminates the need to handle provider-specific details directly. +As a result, developers can easily build features that leverage generative AI without worrying about low-level implementation details—leaving the intricacies of API communication and formatting to the genai package. + +Example of simplified usage (model-agnostic, works with any LLM out of the box) +```dart +final LLMModel model = LLMProvider.gemini.getLLMByIdentifier('gemini-2.0-flash'); +final ModelController controller = model.provider.modelController; + +final payload = controller.inputPayload + ..systemPrompt = 'Say YES or NO' + ..userPrompt = 'The sun sets in the west' + ..credential = 'AIza....'; + +final genAIRequest = controller.createRequest(model, payload); +final answer = await GenerativeAI.executeGenAIRequest(model, genAIRequest); + +print(answer); +``` + +#### Agentic Infrastructure ![Agentic Infrastructure](./images/llmarch.png) +When developing AI-powered features in any application, the process typically involves steps such as system prompting, data validation, and output formatting. However, repeating this workflow for multiple features while taking care of errors and retry logic quickly becomes very cumbersom. To simplify this, we designed a well-defined architecture for building AI agents directly within code. + +The core idea is straightforward: an AI agent in apidash is simply a Dart file containing a class that extends the base class `APIDashAIAgent`, defined as: +```dart +abstract class APIDashAIAgent { + String get agentName; + String getSystemPrompt(); + Future validator(String aiResponse); + Future outputFormatter(String validatedResponse); +} +``` +This base class provides the necessary hooks for implementing an agent. Developers can either rely on the default implementations or override these handlers with custom logic. The result is a fully abstracted, self-contained agent that can be invoked seamlessly from within the application. + +These agents operate within an orchestrator and governor framework that manages everything behind the scenes. This design ensures that developers only need to invoke the agent, while background processes handle concerns such as automatic retries, exponential backoff, and error recovery seamlessly. This saves a lot of time and effort and allows developers to spend more time on improving their actual feature implementation. + + #### Sample Agent Code ```dart @@ -132,11 +185,13 @@ class SimpleFuncGenerator extends APIDashAIAgent { @override String getSystemPrompt() { - return """You are a function generator. -Given API details (REQDATA) and a programming language (TARGET_LANGUAGE), -create a method named `func` that performs the API call. -Return only the code. -"""; + return """you are a programming language function generator. + your only task is to take whatever requirement is provided and convert + it into a valid function named func in the provided programming language + + LANGUAGE: :LANG: + REQUIREMENT: :REQUIREMENT: +"""; //suports templating via :: } @override @@ -155,7 +210,18 @@ Return only the code. } } +//Calling an agent + final res = await APIDashAgentCaller.instance.call( + SimpleFuncGenerator(), + ref: ref, + input: AgentInputs(variables: { + 'REQUIREMENT': 'take the median of the given array', + 'TARGET_LANGUAGE': 'python3', + }), + ); + ``` + --- ### Created the API Tool Generator @@ -204,6 +270,7 @@ This makes use of the Server Driven UI Concept powered by [Stac](https://stac.de talk about new learnign and overcoming issues +- SSE long text splitting into 2 packets causing errors and how i handled it - SDUI Dilemma (cannot use hosted rendering server, cannot use Reflection, cannot bundle flutter sdk), hence had to rely on Server Driven UI using Stac - Stac has no support for returning errors - Larger UIs tend to generate too long Stac code which gets clipped and leads to faulty output