This commit is contained in:
Raj 2024-03-06 19:12:26 +05:30
parent 497d707a7c
commit f443f1737a
17 changed files with 742 additions and 25 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
env.txt
.env

View File

@ -11,6 +11,16 @@
110760672B960D58004E8F2B /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110760662B960D58004E8F2B /* ContentView.swift */; };
110760692B960D59004E8F2B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 110760682B960D59004E8F2B /* Assets.xcassets */; };
1107606C2B960D59004E8F2B /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1107606B2B960D59004E8F2B /* Preview Assets.xcassets */; };
110760752B961315004E8F2B /* ResponseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110760742B961315004E8F2B /* ResponseModel.swift */; };
110760782B96134A004E8F2B /* ContentViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110760772B96134A004E8F2B /* ContentViewModel.swift */; };
1107607B2B96137B004E8F2B /* APIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1107607A2B96137B004E8F2B /* APIService.swift */; };
1107607E2B9613AD004E8F2B /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1107607D2B9613AD004E8F2B /* Constants.swift */; };
110760802B9613B8004E8F2B /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1107607F2B9613B8004E8F2B /* Extensions.swift */; };
110760852B9613EC004E8F2B /* ErrorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110760842B9613EC004E8F2B /* ErrorView.swift */; };
110760872B961448004E8F2B /* LoadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110760862B961448004E8F2B /* LoadingView.swift */; };
112D8BBD2B97671400F18798 /* LangChain in Frameworks */ = {isa = PBXBuildFile; productRef = 112D8BBC2B97671400F18798 /* LangChain */; };
112D8BBF2B97681B00F18798 /* env.txt in Resources */ = {isa = PBXBuildFile; fileRef = 112D8BBE2B97681B00F18798 /* env.txt */; };
11FA40B72B976B78001A1443 /* ModelInferenceService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11FA40B62B976B78001A1443 /* ModelInferenceService.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@ -19,6 +29,16 @@
110760662B960D58004E8F2B /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
110760682B960D59004E8F2B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
1107606B2B960D59004E8F2B /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
110760742B961315004E8F2B /* ResponseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResponseModel.swift; sourceTree = "<group>"; };
110760772B96134A004E8F2B /* ContentViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentViewModel.swift; sourceTree = "<group>"; };
1107607A2B96137B004E8F2B /* APIService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIService.swift; sourceTree = "<group>"; };
1107607D2B9613AD004E8F2B /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
1107607F2B9613B8004E8F2B /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = "<group>"; };
110760842B9613EC004E8F2B /* ErrorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorView.swift; sourceTree = "<group>"; };
110760862B961448004E8F2B /* LoadingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadingView.swift; sourceTree = "<group>"; };
110760882B962035004E8F2B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
112D8BBE2B97681B00F18798 /* env.txt */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; lineEnding = 0; name = env.txt; path = untitled/env.txt; sourceTree = SOURCE_ROOT; };
11FA40B62B976B78001A1443 /* ModelInferenceService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModelInferenceService.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -26,6 +46,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
112D8BBD2B97671400F18798 /* LangChain in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -51,10 +72,17 @@
110760632B960D58004E8F2B /* untitled */ = {
isa = PBXGroup;
children = (
110760882B962035004E8F2B /* Info.plist */,
110760812B9613C3004E8F2B /* Components */,
1107607C2B96139B004E8F2B /* Helpers */,
110760792B96136C004E8F2B /* Services */,
110760762B961338004E8F2B /* ViewModels */,
110760732B9612F7004E8F2B /* Models */,
110760722B96128E004E8F2B /* Views */,
110760642B960D58004E8F2B /* untitledApp.swift */,
110760662B960D58004E8F2B /* ContentView.swift */,
110760682B960D59004E8F2B /* Assets.xcassets */,
1107606A2B960D59004E8F2B /* Preview Content */,
112D8BBE2B97681B00F18798 /* env.txt */,
);
path = untitled;
sourceTree = "<group>";
@ -67,6 +95,57 @@
path = "Preview Content";
sourceTree = "<group>";
};
110760722B96128E004E8F2B /* Views */ = {
isa = PBXGroup;
children = (
110760662B960D58004E8F2B /* ContentView.swift */,
);
path = Views;
sourceTree = "<group>";
};
110760732B9612F7004E8F2B /* Models */ = {
isa = PBXGroup;
children = (
110760742B961315004E8F2B /* ResponseModel.swift */,
);
path = Models;
sourceTree = "<group>";
};
110760762B961338004E8F2B /* ViewModels */ = {
isa = PBXGroup;
children = (
110760772B96134A004E8F2B /* ContentViewModel.swift */,
);
path = ViewModels;
sourceTree = "<group>";
};
110760792B96136C004E8F2B /* Services */ = {
isa = PBXGroup;
children = (
1107607A2B96137B004E8F2B /* APIService.swift */,
11FA40B62B976B78001A1443 /* ModelInferenceService.swift */,
);
path = Services;
sourceTree = "<group>";
};
1107607C2B96139B004E8F2B /* Helpers */ = {
isa = PBXGroup;
children = (
1107607D2B9613AD004E8F2B /* Constants.swift */,
1107607F2B9613B8004E8F2B /* Extensions.swift */,
);
path = Helpers;
sourceTree = "<group>";
};
110760812B9613C3004E8F2B /* Components */ = {
isa = PBXGroup;
children = (
110760842B9613EC004E8F2B /* ErrorView.swift */,
110760862B961448004E8F2B /* LoadingView.swift */,
);
path = Components;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@ -83,6 +162,9 @@
dependencies = (
);
name = untitled;
packageProductDependencies = (
112D8BBC2B97671400F18798 /* LangChain */,
);
productName = untitled;
productReference = 110760612B960D58004E8F2B /* untitled.app */;
productType = "com.apple.product-type.application";
@ -111,6 +193,9 @@
Base,
);
mainGroup = 110760582B960D58004E8F2B;
packageReferences = (
112D8BBB2B97671400F18798 /* XCRemoteSwiftPackageReference "langchain-swift" */,
);
productRefGroup = 110760622B960D58004E8F2B /* Products */;
projectDirPath = "";
projectRoot = "";
@ -125,6 +210,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
112D8BBF2B97681B00F18798 /* env.txt in Resources */,
1107606C2B960D59004E8F2B /* Preview Assets.xcassets in Resources */,
110760692B960D59004E8F2B /* Assets.xcassets in Resources */,
);
@ -137,8 +223,16 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
110760782B96134A004E8F2B /* ContentViewModel.swift in Sources */,
1107607B2B96137B004E8F2B /* APIService.swift in Sources */,
110760672B960D58004E8F2B /* ContentView.swift in Sources */,
110760752B961315004E8F2B /* ResponseModel.swift in Sources */,
110760652B960D58004E8F2B /* untitledApp.swift in Sources */,
11FA40B72B976B78001A1443 /* ModelInferenceService.swift in Sources */,
1107607E2B9613AD004E8F2B /* Constants.swift in Sources */,
110760852B9613EC004E8F2B /* ErrorView.swift in Sources */,
110760802B9613B8004E8F2B /* Extensions.swift in Sources */,
110760872B961448004E8F2B /* LoadingView.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -274,6 +368,7 @@
DEVELOPMENT_ASSET_PATHS = "\"untitled/Preview Content\"";
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = untitled/Info.plist;
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
@ -302,6 +397,7 @@
DEVELOPMENT_ASSET_PATHS = "\"untitled/Preview Content\"";
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = untitled/Info.plist;
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
@ -342,6 +438,25 @@
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCRemoteSwiftPackageReference section */
112D8BBB2B97671400F18798 /* XCRemoteSwiftPackageReference "langchain-swift" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/buhe/langchain-swift";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 0.48.0;
};
};
/* End XCRemoteSwiftPackageReference section */
/* Begin XCSwiftPackageProductDependency section */
112D8BBC2B97671400F18798 /* LangChain */ = {
isa = XCSwiftPackageProductDependency;
package = 112D8BBB2B97671400F18798 /* XCRemoteSwiftPackageReference "langchain-swift" */;
productName = LangChain;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 110760592B960D58004E8F2B /* Project object */;
}

View File

@ -0,0 +1,302 @@
{
"pins" : [
{
"identity" : "async-http-client",
"kind" : "remoteSourceControl",
"location" : "https://github.com/swift-server/async-http-client.git",
"state" : {
"revision" : "291438696abdd48d2a83b52465c176efbd94512b",
"version" : "1.20.1"
}
},
{
"identity" : "feedkit",
"kind" : "remoteSourceControl",
"location" : "https://github.com/nmdias/FeedKit",
"state" : {
"revision" : "68493a33d862c33c9a9f67ec729b3b7df1b20ade",
"version" : "9.1.2"
}
},
{
"identity" : "functions-swift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/supabase-community/functions-swift",
"state" : {
"revision" : "d2fac1980cf5b589077b635d4e18249f7939a9db",
"version" : "1.1.1"
}
},
{
"identity" : "generative-ai-swift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/google/generative-ai-swift",
"state" : {
"revision" : "e2cebcd90645a3a94c0c823696e510a176bc384a",
"version" : "0.4.8"
}
},
{
"identity" : "get",
"kind" : "remoteSourceControl",
"location" : "https://github.com/kean/Get",
"state" : {
"revision" : "12830cc64f31789ae6f4352d2d51d03a25fc3741",
"version" : "2.1.6"
}
},
{
"identity" : "getextensions",
"kind" : "remoteSourceControl",
"location" : "https://github.com/binaryscraping/GetExtensions",
"state" : {
"revision" : "aa20f38721142eb6592b2c8f11179d32d7d70ae3",
"version" : "1.0.0"
}
},
{
"identity" : "gotrue-swift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/supabase-community/gotrue-swift",
"state" : {
"revision" : "e53731e21569b2e9ce6f58763ad0fbce8e2e7603",
"version" : "1.3.0"
}
},
{
"identity" : "keychainaccess",
"kind" : "remoteSourceControl",
"location" : "https://github.com/kishikawakatsumi/KeychainAccess",
"state" : {
"revision" : "84e546727d66f1adc5439debad16270d0fdd04e7",
"version" : "4.2.2"
}
},
{
"identity" : "langchain-swift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/buhe/langchain-swift",
"state" : {
"revision" : "d2c945cfbb0b1b9bc571dc5121fbaa264bb42bd6",
"version" : "0.48.0"
}
},
{
"identity" : "openai-kit",
"kind" : "remoteSourceControl",
"location" : "https://github.com/buhe/openai-kit",
"state" : {
"revision" : "f0c785d22dd14f71a42ad83cedbbddc02591aadb",
"version" : "1.8.5"
}
},
{
"identity" : "postgrest-swift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/supabase-community/postgrest-swift",
"state" : {
"revision" : "2afb40a2f91ba881db8f04131e1b5146001813a5",
"version" : "1.0.3"
}
},
{
"identity" : "realtime-swift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/supabase-community/realtime-swift.git",
"state" : {
"revision" : "0b985c687fe963f6bd818ff77a35c27247b98bb4",
"version" : "0.0.2"
}
},
{
"identity" : "similarity-search-kit",
"kind" : "remoteSourceControl",
"location" : "https://github.com/buhe/similarity-search-kit",
"state" : {
"revision" : "39bbd0b5c2662728792ee9be132212e5fd4a49e2",
"version" : "0.0.16"
}
},
{
"identity" : "storage-swift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/supabase-community/storage-swift.git",
"state" : {
"revision" : "65cae9e1156711043cbdebb27b4df93cbef46a1b",
"version" : "0.1.4"
}
},
{
"identity" : "supabase-swift",
"kind" : "remoteSourceControl",
"location" : "https://github.com/supabase-community/supabase-swift",
"state" : {
"revision" : "7088b85247c8e56317f0b22b9d60655e8f762fec",
"version" : "0.3.0"
}
},
{
"identity" : "swift-algorithms",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-algorithms",
"state" : {
"revision" : "f6919dfc309e7f1b56224378b11e28bab5bccc42",
"version" : "1.2.0"
}
},
{
"identity" : "swift-atomics",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-atomics.git",
"state" : {
"revision" : "cd142fd2f64be2100422d658e7411e39489da985",
"version" : "1.2.0"
}
},
{
"identity" : "swift-collections",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-collections.git",
"state" : {
"revision" : "94cf62b3ba8d4bed62680a282d4c25f9c63c2efb",
"version" : "1.1.0"
}
},
{
"identity" : "swift-filestore",
"kind" : "remoteSourceControl",
"location" : "https://github.com/juyan/swift-filestore",
"state" : {
"revision" : "61aa52c514e39a70c17ce6421d70807f46282154",
"version" : "0.7.0"
}
},
{
"identity" : "swift-http-types",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-http-types",
"state" : {
"revision" : "12358d55a3824bd5fed310b999ea8cf83a9a1a65",
"version" : "1.0.3"
}
},
{
"identity" : "swift-log",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-log.git",
"state" : {
"revision" : "e97a6fcb1ab07462881ac165fdbb37f067e205d5",
"version" : "1.5.4"
}
},
{
"identity" : "swift-nio",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-nio.git",
"state" : {
"revision" : "635b2589494c97e48c62514bc8b37ced762e0a62",
"version" : "2.63.0"
}
},
{
"identity" : "swift-nio-extras",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-nio-extras.git",
"state" : {
"revision" : "a3b640d7dc567225db7c94386a6e71aded1bfa63",
"version" : "1.22.0"
}
},
{
"identity" : "swift-nio-http2",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-nio-http2.git",
"state" : {
"revision" : "0904bf0feb5122b7e5c3f15db7df0eabe623dd87",
"version" : "1.30.0"
}
},
{
"identity" : "swift-nio-ssl",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-nio-ssl.git",
"state" : {
"revision" : "7c381eb6083542b124a6c18fae742f55001dc2b5",
"version" : "2.26.0"
}
},
{
"identity" : "swift-nio-transport-services",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-nio-transport-services.git",
"state" : {
"revision" : "6cbe0ed2b394f21ab0d46b9f0c50c6be964968ce",
"version" : "1.20.1"
}
},
{
"identity" : "swift-numerics",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-numerics.git",
"state" : {
"revision" : "0a5bc04095a675662cf24757cc0640aa2204253b",
"version" : "1.0.2"
}
},
{
"identity" : "swift-system",
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-system.git",
"state" : {
"revision" : "025bcb1165deab2e20d4eaba79967ce73013f496",
"version" : "1.2.1"
}
},
{
"identity" : "swiftsoup",
"kind" : "remoteSourceControl",
"location" : "https://github.com/scinfu/SwiftSoup",
"state" : {
"revision" : "1d39e56d364cba79ce43b341f9661b534cccb18d",
"version" : "2.7.1"
}
},
{
"identity" : "swiftyjson",
"kind" : "remoteSourceControl",
"location" : "https://github.com/SwiftyJSON/SwiftyJSON",
"state" : {
"revision" : "b3dcd7dbd0d488e1a7077cb33b00f2083e382f07",
"version" : "5.0.1"
}
},
{
"identity" : "swiftynotion",
"kind" : "remoteSourceControl",
"location" : "https://github.com/buhe/SwiftyNotion",
"state" : {
"revision" : "61af40905bfd5eb8cad454e02095dfbdea0498cb",
"version" : "0.1.3"
}
},
{
"identity" : "swxmlhash",
"kind" : "remoteSourceControl",
"location" : "https://github.com/drmohundro/SWXMLHash",
"state" : {
"revision" : "a853604c9e9a83ad9954c7e3d2a565273982471f",
"version" : "7.0.2"
}
},
{
"identity" : "urlqueryencoder",
"kind" : "remoteSourceControl",
"location" : "https://github.com/kean/URLQueryEncoder",
"state" : {
"revision" : "4ce950479707ea109f229d7230ec074a133b15d7",
"version" : "0.2.1"
}
}
],
"version" : 2
}

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
uuid = "A3DF07B5-1F78-431D-A635-A8D7305CB3FE"
type = "1"
version = "2.0">
<Breakpoints>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "D6B89E59-0298-4F35-AAE0-F89608E3C93E"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "untitled/Services/AiService.swift"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "10"
endingLineNumber = "10"
landmarkName = "ModelInferenceService"
landmarkType = "14">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints>
</Bucket>

View File

@ -4,6 +4,48 @@
<dict>
<key>SchemeUserState</key>
<dict>
<key>Playground (Playground) 1.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>10</integer>
</dict>
<key>Playground (Playground) 2.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>11</integer>
</dict>
<key>Playground (Playground).xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>9</integer>
</dict>
<key>SWXMLHashPlayground (Playground) 1.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>7</integer>
</dict>
<key>SWXMLHashPlayground (Playground) 2.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>8</integer>
</dict>
<key>SWXMLHashPlayground (Playground).xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>6</integer>
</dict>
<key>untitled.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>

View File

@ -1,6 +1,10 @@
{
"colors" : [
{
"color" : {
"platform" : "universal",
"reference" : "systemIndigoColor"
},
"idiom" : "universal"
}
],

View File

@ -0,0 +1,20 @@
//
// ErrorView.swift
// untitled
//
// Created by Raj Sharma on 04/03/24.
//
import SwiftUI
struct ErrorView: View {
let errorText: String
var body: some View {
Text(errorText)
.foregroundColor(Color.red)
}
}
#Preview {
ErrorView(errorText:"example error")
}

View File

@ -0,0 +1,18 @@
//
// LoadingView.swift
// untitled
//
// Created by Raj Sharma on 04/03/24.
//
import SwiftUI
struct LoadingView: View {
var body: some View {
Text(/*@START_MENU_TOKEN@*/"Loading..."/*@END_MENU_TOKEN@*/)
}
}
#Preview {
LoadingView()
}

View File

@ -1,24 +0,0 @@
//
// ContentView.swift
// untitled
//
// Created by Raj Sharma on 04/03/24.
//
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text("Hello, world!")
}
.padding()
}
}
#Preview {
ContentView()
}

View File

@ -0,0 +1,14 @@
//
// Constants.swift
// untitled
//
// Created by Raj Sharma on 04/03/24.
//
import Foundation
struct Constants {
static let apiEndpoint = "https://official-joke-api.appspot.com/jokes/programming/random"
static let server = "official-joke-api.appspot.com"
}

View File

@ -0,0 +1,19 @@
//
// Extensions.swift
// untitled
//
// Created by Raj Sharma on 04/03/24.
//
import SwiftUI
extension View {
// Example of a custom modifier
func customModifier() -> some View {
self.padding(10)
.background(Color.blue)
.foregroundColor(.white)
.cornerRadius(5)
}
}

5
untitled/Info.plist Normal file
View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>

View File

@ -0,0 +1,17 @@
//
// ResponseModel.swift
// untitled
//
// Created by Raj Sharma on 04/03/24.
//
import Foundation
struct ResponseModel: Codable {
let ha_response: String
}
struct AiResponseModel: Codable {
let result: String
}

View File

@ -0,0 +1,38 @@
//
// APIService.swift
// untitled
//
// Created by Raj Sharma on 04/03/24.
//
import Foundation
class APIService: NSObject {
lazy var urlSession: URLSession = {
let configuration = URLSessionConfiguration.default
configuration.urlCache = nil // Disable caching for this session
configuration.requestCachePolicy = .reloadIgnoringLocalCacheData // Ignore local cache
return URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
}()
func fetchData() async throws -> ResponseModel {
let url = URL(string: Constants.apiEndpoint)!
let (data, _) = try await urlSession.data(from: url)
let responseModel = try JSONDecoder().decode(ResponseModel.self, from: data)
return responseModel
}
}
extension APIService: URLSessionDelegate {
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
// WARNING: Using .useCredential without validating the certificate poses a security risk
if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust,
let serverTrust = challenge.protectionSpace.serverTrust {
let credential = URLCredential(trust: serverTrust)
completionHandler(.useCredential, credential)
} else {
completionHandler(.performDefaultHandling, nil)
}
}
}

View File

@ -0,0 +1,35 @@
//
// AiService.swift
// untitled
//
// Created by Raj Sharma on 05/03/24.
//
import Foundation
import LangChain
class TranslationService {
let template = """
Translate all input to hinglish (hindi in english).
{history}
Human: {human_input}
Assistant:
"""
lazy var chatgpt_chain: LLMChain = {
LLMChain(
llm: OpenAI(),
prompt: PromptTemplate(input_variables: ["history", "human_input"], partial_variable: [:], template: template),
memory: ConversationBufferWindowMemory()
)
}()
func translate(text: String) async throws -> String {
let input = text
// Assuming `chatgpt_chain.predict` returns a String and might throw an error.
guard let response = await chatgpt_chain.predict(args: ["human_input": input]) else { return "Failed" }
return response
}
}

View File

@ -0,0 +1,48 @@
//
// ContentViewModel.swift
// untitled
//
// Created by Raj Sharma on 04/03/24.
//
import SwiftUI
class ContentViewModel: ObservableObject {
@Published var responseString: String?
@Published var translatedText: String?
@Published var isLoading = false
@Published var error: Error?
private var apiService = APIService()
private var translationService = TranslationService()
func fetchData() async {
isLoading = true
do {
let responseModel = try await apiService.fetchData()
responseString = responseModel.ha_response
isLoading = false
} catch {
self.error = error
isLoading = false
}
}
func updateUIWithTranslation(for text: String) async {
isLoading = true // Assuming you want to indicate loading state for translation as well.
do {
let translatedText = try await translationService.translate(text: text)
DispatchQueue.main.async {
// No longer needs Task, updates directly in the async context.
self.translatedText = translatedText
self.isLoading = false
}
} catch {
DispatchQueue.main.async {
self.error = error
self.isLoading = false
}
}
}
}

View File

@ -0,0 +1,38 @@
//
// ContentView.swift
// untitled
//
// Created by Raj Sharma on 04/03/24.
//
import SwiftUI
struct ContentView: View {
@StateObject var viewModel = ContentViewModel()
var body: some View {
VStack {
if viewModel.isLoading {
// Replace with a custom loading view if needed
LoadingView()
} else if let responseString = viewModel.translatedText {
Text(responseString)
} else if let error = viewModel.error {
// Replace with a custom error view if needed
ErrorView(errorText:error.localizedDescription)
}
}.padding()
.onAppear {
Task {
await viewModel.updateUIWithTranslation(for: "Hello mom")
}
}
}
}
#Preview {
ContentView()
}