Мобильный кот
2.71K subscribers
88 photos
3 videos
2 files
87 links
Все, что считаю важным про жизнь мобильного разработчика

Шкаф с материалами
https://t.me/cat_with_mobile_cabinet
Download Telegram
December 31, 2024
👑 SwiftGPT: Библиотека для работы с ChatGPT

Выложил на GitHub первую версию библиотеки SwiftGPT. Она предназначена для интеграции возможностей ChatGPT в iOS/macOS/Linux проекты.

⭐️ Особенности

- Совместимость с официальным OpenAI API: интерфейс основан на стилях OpenAI.
- Поддержка Swift 6 и Swift Concurrency.
- Мультиплатформенность: работает на всех платформах Apple (iOS, macOS, watchOS, tvOS) и даже на Linux.

⬆️ Основные функции

- Поддержка Chat Completions (генерация текста)
- В планах: Assistants API, Text-to-Speech, Text Transcriptions, Image generation и др.
- Возможность указать URL для запросов (актуально для РФ, когда делаешь свой прокси)

Почему я занялся SwiftGPT

Я давно интересуюсь искусственным интеллектом и активно применяю его решения в своих проектах. Для одной из задач мне потребовался API ChatGPT, но я обнаружил, что официального SDK для iOS не существует. Сначала я задумался о создании собственной библиотеки, но обратил внимание на пакет ChatGPTSwift.

У данной библиотеки есть сильная сторона — использование OpenAPI 3.0 спецификации для сетевого слоя. То есть разработчик взял официальную спецификацию, написанную по стандарту OpenAPI 3.0, и использую
пакет от Apple - Swift OpenAPI Generator, автогенерировал сетевой слой.

На мой взгляд, это супер эффективное решение, которое позволяет упростить интеграцию с любым бекендом.

Однако, реализация ChatGPTSwift имела ряд проблем, которые требовали исправлений.

🤕 Проблемы ChatGPTSwift и их решения

- Единый монолитный класс: библиотека объединяла все функции в одном классе, что снижало читаемость и масштабируемость. Я переработал архитектуру, распределив функции в соответствии с официальным ChatGPT API.
- Неудобное API: оригинальное API библиотеки отличалось от OpenAI API. Теперь интерфейс полностью соответствует официальной документации, что минимизирует порог вхождения.
- Ошибки Swift Concurrency: вместо необоснованных решений вроде @unchecked Sendable, я внедрил корректную поддержку Swift Concurrency.
- Сложные названия типов и свойств: автогенерированные имена вроде text_event_hyphen_stream заменены на более понятные и привычные — например, textEventStream.
- Баги и устаревший API: обновил сетевой слой до актуальной версии API и устранил ошибки в логике.
- Архаичная обработка контекста токенов: библиотека обрезала контекст до 4000 токенов, хотя ChatGPT последней версии поддерживает 128 000. Это ограничение устранено.

💊 Что дальше

Переработка библиотеки — это лишь начало работы. Сейчас SwiftGPT поддерживает основные функции, но я продолжаю тестировать её в реальных проектах, а также развивать поддержку новых и существующих API OpenAI.

# Пример использования

Все максимально просто

import SwiftGPT

// Установка API key
OpenAI.Configuration.apiKey = .apiKey("your-api-key")

Task {
// создание сессии
let chat = OpenAI.Chat(model: .gpt4o)
// запрос
let response = try await chat.completions(prompt: "Как погода сегодня?")
print("Ответ: \(response)")
}

Если вам нужно интегрировать ChatGPT в iOS/macOS/Linux приложение, уже сейчас вы можете использовать SwiftGPT.

Забрать/посмотреть можно тут.

Теперь эта библиотека открыта для обратной связи и предложений сообщества!

#инструменты #ai #chatgpt
Please open Telegram to view this post
VIEW IN TELEGRAM
January 28
✍️ Об усилиях Apple и настоящем Swift

Apple открыла исходный код Swift Build - новость, которую вы точно видели. Возможно уже склонировали репозиторий swift-build, чтобы «полежало». Или может вы любите копать в суть и решили погрузиться в системы сборки и компиляторы. Кстати ранее рассказывал об интересной книге по LLVM.

Первое, что удивило меня - статистика языков в репозитории на GitHub (смотреть прикрепленное изображение). Да, Swift Build полностью написана на Swift. И даже зависимости, вроде swift-driver и swift-system, имеют практически 100%-ю реализацию на Swift.

И на самом деле это очень круто, здорово! Приятно видеть, что язык, на котором мы пишем свои убер-приложения может не только на словах использоваться для других целей, но и сама Apple развивает его, предпочитая его вместо традиционных ObjC, C/C++.

В середине 2024 года, на GitHub был создан новый аккаунт SwiftLang, куда незаметно переехал репо с самим свифтом (старый адрес https://github.com/apple/swift редеректит на этот репо). И видимо произошло это вместе с другим крупным опенсорс-анонсом - Swift Foundation.

Создается впечатление, что яблочная компания активировала усилия по расширению зоны применения Swift, создавая небольшую визуальную дистанцию между собой и языком, чтобы у разработчиков пропала стойкая ассоциация "Swift = Apple". Получается, что Apple продолжает создавать новые области его применения, и возможно "будущий вы", как Swift-разработчик, сможете найти работу не только кнопки красить.

И мне стало интересно, а что там с самим Swift'ом. Как менялся процент использования языков в самом главном репозитории. Об этом в следующем посте.
Please open Telegram to view this post
VIEW IN TELEGRAM
February 3
В продолжении предыдущего поста...

🖥 Логарифмический график изменения процентного соотношения основных языков программирования в репозитории Swift. От версии 2.2 до 6.1.

Повторю, график логарифмический, иначе низы слились бы в одну линию. Смотрите значения оси Y и подписанные циферки.

🧍‍♂ Что я сделал

Конечно же начал с клонирования репозитория Swift. Дальше нужны было найти инструмент для подсчета процентов на каждом из нужных мне коммитов. Сам GitHub для этой цели использует Ruby-приложение Linguist, которое хрен поставишь на macOS. Я начал с cloc, но цифры, которые он выдавал были странные. Оказалось, что он подсчитывает код построчно, то есть
if { 
// ...
}

дает +3 в копилку свифта, а
if { // ... }

дает +1.

И это явно не то, что нужно, так как Linguist подсчитывает код побайтово.

Оказалось, что у Linguist есть порт на языке Go - Enry. А скомпилировать go-приложение на макоси можно без вопросов, что я и сделал. Дальше муторное переключение между коммитами, заваривание чая, сбор статистики, заваривание кофе, сведение все в табличку, поиск художника для отрисовки графика.

Из графика видно, что разрыв между C++ и Swift в 2016 года был практически в 2 раза, а в последнем релизе Swift 6.1 - практически отсутствует. Objective-C++ все еще есть, хотя в Swift 5.9 появился интероп между плюсами и свифтом.

🧍‍♂ Верим в светлые времена, когда часть исходного кода плюсов будет написана на Swift, а не наоборот)
Please open Telegram to view this post
VIEW IN TELEGRAM
February 3
Что значит Swift Build для экосистемы Swift

Разработчики Tuist об аспектах выпуска Swift Build. Очень интересно почитать мысли тех, кто годами занимается низкоуровневой работой с проектами. О перспективах туиста и формата проектов.

Авторитетное мнение.
February 5
👍 Выступлению на Мобиусе 2025 быть)

Чуть позже дам подробностей, о чем будем рассказывать.
Please open Telegram to view this post
VIEW IN TELEGRAM
February 19
February 27
Mobius 2025. Итоги

Было круто, если еще не бывали там - атакуйте мозг своего работодателю, чтобы отправил. Нетворкинг прекрасный. В этот раз OZON устроил чрезвычайно крутую вечеринку после первого дня, удалось и на сцене Кирпичей навалить попеть, и с Яндексом погудеть (я в Райфе, для информации).

К докладу удалось выложить в опенсорс все, что планировал. Не все в идеальном виде, не со всей докой. Но сперва год разработки, потом три месяца адовой подготовки не прошли даром.

🦄 RaifMagic
Панель управления iOS проектом. Место моего творчества последний год.

⚠️ CodeOwners
Система, управляющая отношением «файл-владелец» в проекте, и контролирующее влитие МРов в мастер. Суть в том, что разраб может влить МР только когда все заинтересованные лица поставят аппрувы. Данная система есть в составе Мейджика (см. выше), но так же может использоваться независимо. Скоро будет релиз более автоматизированной версии и, возможно, GUI на KMP под все операционки. Как сайд-эффект - вы всегда знаете, какая команда отвечает за тот или иной модуль.

💇♀️ CodeStyler
Система, контролирующая качество кода. Такой linter + danger на максималках, расширяемый, написан на Swift, с локальным GUI и интеграцией на CI. Суть в том, что пока пользователь не выполнит все правила оформления кода и ресурсов, то он не сможет влить их в репозиторий (или даже просто пушнуть). А вишенка в том, что можете писать свои правила на что угодно. Мы, к примеру, проверяем правила оформления в соответствии со swiftformat, архитектурные вопросы, форматы загружаемых изображений, а на CI еще наличие русских символов в названии ветки (оказалось капец как актуально😁)

📟 CommandExecutor
Либа для вызова shell-команд из Swift. Полная интеграция со Swift Concurrency и Swift 6.

Следующим постом приложу презентацию с доклада, но лучше смотреть доклад на сайте конференции. Надеюсь его скоро выложат на ютубчик
April 16
April 16