Add OpenAI-compatible API provider support - #213
Open
f33rx wants to merge 21 commits into
Open
Conversation
f33rx
force-pushed
the
claude/add-openai-gateway-support-CwgcS
branch
from
January 29, 2026 03:11
5ffb38d to
3dfb7dc
Compare
Add support for connecting to OpenAI-compatible API gateways like LiteLLM, OpenRouter, Azure OpenAI, and other providers that implement the OpenAI API. Changes: - Add OpenAIService with streaming chat completions and model listing - Add provider selection toggle in Settings (Ollama vs OpenAI Compatible) - Update ModelProvider enum with openAI case - Update LanguageModelStore to fetch models from selected provider - Update ConversationStore to route chat requests to correct API - Update PanelCompletionsVM for OpenAI support - Update AppStore reachability checks for both providers
Adds CI/CD pipeline that: - Builds the macOS app on macOS 14 with Xcode 16.1 - Creates an unsigned .app for testing - Packages into a DMG installer - Uploads artifacts for download - Creates draft releases when tags are pushed Triggers on pushes to main, claude/* branches, tags, and PRs.
The file was created but not added to the Xcode project file, causing build failures in CI. This adds the necessary entries to project.pbxproj.
- Remove archive/export steps that require code signing - Build directly to DerivedData and copy the .app - Remove error-swallowing || true to see actual failures - Use explicit paths for build products
The OpenAIService.chat() expects Double? but CompletionInstructionSD.modelTemperature is Float?. Convert Float to Double to fix build error. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
f33rx
force-pushed
the
claude/add-openai-gateway-support-CwgcS
branch
from
January 29, 2026 03:12
3dfb7dc to
fb752bd
Compare
Document how to install unsigned builds on macOS (Gatekeeper bypass via xattr -cr and System Settings) and iOS (AltStore, Sideloadly, Apple Configurator 2). Includes troubleshooting for common issues. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add INSTALL.md with sideloading docs for macOS (Gatekeeper bypass) and iOS (AltStore, Sideloadly, Apple Configurator 2) - Add GitHub Actions workflow for iOS builds (simulator and device) - Produces downloadable .ipa artifacts for sideloading Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Merged polecat branches: - polecat/jasper/hq-cv-5sjku - polecat/quartz/hq-hku Resolved INSTALL.md conflict by combining best content from both. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
iPhone 15 simulator is not available by default on macos-14 runners with Xcode 16.1. Xcode 16.1 ships with iOS 18.1 runtimes that include iPhone 16 series simulators. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add GitHub Actions workflow that builds the project for iPadOS using iPad Pro 13-inch (M4) simulator on macOS 14 runner. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add NavigationSplitView for iPad (regular width) with persistent sidebar - Keep drawer-style SideBarStack for iPhone (compact width) - Update EmptyConversaitonView to use 4 columns on iPad vs 2 on iPhone - Add toolbar with model selector and new conversation button for iPad - Detect horizontal size class to adapt layout dynamically Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use NavigationSplitView on iPad (regular horizontal size class) for proper iPad multitasking support including Split View and Slide Over modes. iPhone continues to use the SideBarStack slide-out drawer. Changes: - Chat.swift: Detect horizontal size class and use NavigationSplitView on iPad for proper sidebar behavior in multitasking scenarios - ChatView_iOS.swift: Hide hamburger menu and new conversation buttons on iPad since NavigationSplitView provides built-in sidebar controls Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Ignore local tooling directories: - .runtime/ - runtime artifacts - .claude/ - Claude Code session data - .beads/ - beads database - .logs/ - local logs Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- en-ilk: Add iPadOS build target to CI workflow - en-tg8: Fix UI scaling for iPad screen sizes - en-2lq: Add iPad multitasking support (Split View, Slide Over) - en-vv2: Fix failing iOS CI build Resolved Chat.swift conflict by combining both iPad improvements: - #if os(iOS) guards for iPad-specific properties - NavigationSplitView for regular size class (iPad) - .navigationSplitViewStyle(.balanced) for proper split view - columnVisibility control for menu tap behavior Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds support for OpenAI-compatible APIs (such as LiteLLM, OpenRouter, and Azure OpenAI) alongside the existing Ollama integration. Users can now switch between providers in settings and use any OpenAI-compatible endpoint.
Key Changes
openAIcase withStringconformance,CaseIterable, and adisplayNameproperty for UI presentationConversationStorenow routes requests to appropriate service based on selected providerconvertToOpenAIMessages()helper to transform message formatAppStore.reachable()checks appropriate service based on providerLanguageModelStore.loadModels()fetches from selected providerPanelCompletionsVMsupports both providers for macOS panel completionsImplementation Details
[DONE]sentinel