genui_x 0.0.13
genui_x: ^0.0.13 copied to clipboard
Connect any LLM — Claude, OpenAI, Gemini, Ollama, or a custom proxy — to Google's genui (Generative UI) framework with one Transport.
0.0.13 #
- Upgrade dependency to
genui: ^0.9.2in both the package and example app. - Upgrade transport dependency to
http: ^1.6.0. - Improve SSE parser compatibility for OpenAI-compatible proxies by accepting
both
data: {...}anddata:{...}line formats. - Harden transport error handling by skipping empty outbound messages and surfacing API errors as user-safe text chunks.
- Harden travel example rendering against model output variance:
register both
travel-catalogand legacytravelIDs, accept flat or nested (data) props, and add safe fallbacks for missing fields. - Smooth travel example waiting UX by keeping progress visible until a real UI/text result is rendered.
- Add troubleshooting notes in README for 200-with-delayed-UI behavior, proxy SSE formatting differences, catalog ID mismatches, and prop shape compatibility.
0.0.12 #
- Add
GenuiXTransport.ollama()factory — thin wrapper aroundGenuiXTransport.openai()configured for Ollama's OpenAI-compatible endpoint. Defaults tohttp://localhost:11434andllama3.2. No API key required (a placeholder bearer token is sent so the OpenAI-compat layer accepts the request). Disables retries by default (maxRetries: 0) since local servers don't rate-limit. - Add
example/lib/ollama_main.dart— runnable local-Ollama chat demo withenforceJsonMode: truefor stricter A2UI compliance from local models. SupportsOLLAMA_BASE_URLandOLLAMA_MODEL--dart-defines. - README overhaul for discoverability — new tagline, provider matrix table (Anthropic / OpenAI / Gemini / Ollama / custom proxy at a glance), CI badge, demo-GIF placeholder block, Ollama backend section, and Ollama example run instructions.
pubspec.yaml— addhomepageanddocumentationURLs, refreshtopicsto[genui, llm, claude, gemini, openai](drop redundantflutterand broadai), and stage a commented-outscreenshots:block for the demo GIF.- No public API removals or signature changes; existing call sites for
.anthropic(),.openai(), and.gemini()are byte-identical.
0.0.11 #
- Add
GenuiXTransport.gemini()factory — pre-configures Google's Generative Language API endpoint (/v1beta/models/{model}:streamGenerateContent?alt=sse), thex-goog-api-keyheader, and the Gemini SSE format. Works withgemini-2.5-flash,gemini-2.5-pro, and Vertex AI / proxy endpoints that mirror the Generative Language API surface. - Add
GenuiXStreamFormat.geminiand a Gemini SSE parser (GeminiSseParser) that extracts text fromcandidates[*].content.parts[*].text. - Add
enforceJsonModeoption onGenuiXTransport.openai()andGenuiXConfig— whentrue, injectsresponse_format: {"type": "json_object"}for tighter A2UI compliance on OpenAI and OpenAI-compatible backends. Respects user-suppliedrequestBodyOverrides['response_format']. - Add
example/lib/gemini_main.dart— runnable Gemini chat demo. - Add GitHub Actions CI (
.github/workflows/ci.yml) runningflutter analyzeandflutter teston push and pull request. - Refactor request building: extract
_buildUri()and_buildPayload()inGenuiXTransportto keep provider-specific logic isolated. The Anthropic and OpenAI request shapes are unchanged; this is a non-breaking internal cleanup that supports the new Gemini path. - Internal rename pass — no public API change.
lib/src/claude_transport.dart→genui_x_transport.dart,lib/src/claude_config.dart→genui_x_config.dart,lib/src/sse_parser.dart→anthropic_sse_parser.dart(classClaudeSseParser→AnthropicSseParser). Internal_streamClaude()/_toClaudeMessage()/_sseParserare now_streamLlm()/_toMessage()/_anthropicSseParser. Test files renamed to match. AGENTS.md docs updated. The public surface (GenuiXTransport,GenuiXConfig,GenuiXStreamFormat, errors) is unchanged.
0.0.10 #
- Add
GenuiXTransport.anthropic()factory constructor — mirrors.openai()with explicit Anthropic defaults (x-api-keyheader,/v1/messagesendpoint, Anthropic SSE format). - Add automatic retry on 429 responses with exponential backoff — configurable via
maxRetries(default3). RespectsRetry-Afterheader when present.
0.0.9 #
- Add
GenuiXTransport.openai()factory constructor — pre-configuresAuthorization: Bearerheader,/v1/chat/completionsendpoint, and OpenAI SSE format. Works with OpenAI, OpenRouter, LiteLLM, and any OpenAI-compatible proxy. - Add
surfaceOperations(SurfaceOperations?) toGenuiXTransportandGenuiXConfig— usePromptBuilder.custom()to control which A2UI operations (create, update, delete) the AI may perform. Defaults toPromptBuilder.chat()(create-only) when not set. - Add
clientDataModel(Map<String, Object?>?) toGenuiXTransportandGenuiXConfig— inject app-state context (user profile, active session, domain data) into the system prompt. - Add
GenuiXRateLimitError— thrown on 429 responses. ExposesretryAfter: int?parsed from theRetry-Afterheader. - Re-export
PromptFragmentsandSurfaceOperationsfromgenui_x.dart— users no longer need a separateimport 'package:genui/genui.dart'to configure the transport. - Remove Flutter upper-bound constraint (
<4.0.0) per pub.dev deprecation guidance. - Overhaul README — add genui/genui_x architecture diagram, backend examples,
surfaceOperationsandclientDataModelusage.
0.0.8 #
- Improve doc comments on all public APIs —
GenuiXTransport,GenuiXConfig,GenuiXStreamFormat,GenuiXAuthError,GenuiXApiError. - Add
example/lib/proxy_main.dart— runnable example for OpenAI-compatible backends (LiteLLM, OpenRouter, custom proxy). - Update
example/README.mdto document all three entry points.
0.0.7 #
- Rename
ClaudeTransport→GenuiXTransport,ClaudeConfig→GenuiXConfig,ClaudeStreamFormat→GenuiXStreamFormat— names no longer imply Claude-only. - Rename
ClaudeAuthException→GenuiXAuthErrorandClaudeApiException→GenuiXApiErrorfor provider-neutral naming. - Add
cancel()toClaudeTransport— abort an in-flight request and resetisLoading. - Add
clearHistory()toClaudeTransport— reset conversation history without creating a new transport. - Add
debug: booltoClaudeConfigandClaudeTransport— prints request URL, model, status code, and errors viadebugPrint. - Add transport-level tests: error handling, streaming (Anthropic + OpenAI),
isLoadingstate,cancel(),clearHistory().
0.0.5 #
- Add
systemPromptFragmentstoClaudeTransportandClaudeConfig— inject persona, domain restrictions, or date context into the system prompt. - Add
isLoading(ValueNotifier<bool>) toClaudeTransport— drive loading indicators without manually tracking conversation state. - Tighten SDK constraint to
>=3.10.0 <4.0.0and Flutter to>=3.35.7 <4.0.0to match genui 0.8.0 requirements.
0.0.4 #
- Rename main library export to
genui_x.dart— import withpackage:genui_x/genui_x.dart. - Add
requestBodyOverridestoClaudeTransportandClaudeConfigfor provider-specific JSON-mode support. - Add travel demo example app and minimal example app.
- Fix
baseUrlresolution in example apps.
0.0.3 #
- Add OpenAI-style stream format support and parser.
- Allow selecting stream format via ClaudeConfig.
- Document OpenAI-style proxy configuration.
- Add request body overrides for JSON-mode responses.
0.0.2 #
- Add configurable endpoint path and request headers for proxies/LiteLLM.
- Document proxy usage and authorization header support.
0.0.1 #
- Initial release of the Claude transport adapter for genui.
- Includes ClaudeTransport, configuration, and SSE parsing.
- Adds a Flutter example app and basic tests.