| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- import SwiftUI
- struct ContentView: View {
- @StateObject var llamaState = LlamaState()
- @State private var multiLineText = ""
- @State private var showingHelp = false // To track if Help Sheet should be shown
- var body: some View {
- NavigationView {
- VStack {
- ScrollView(.vertical, showsIndicators: true) {
- Text(llamaState.messageLog)
- .font(.system(size: 12))
- .frame(maxWidth: .infinity, alignment: .leading)
- .padding()
- .onTapGesture {
- UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
- }
- }
- TextEditor(text: $multiLineText)
- .frame(height: 80)
- .padding()
- .border(Color.gray, width: 0.5)
- HStack {
- Button("Send") {
- sendText()
- }
- Button("Bench") {
- bench()
- }
- Button("Clear") {
- clear()
- }
- Button("Copy") {
- UIPasteboard.general.string = llamaState.messageLog
- }
- }
- .buttonStyle(.bordered)
- .padding()
- NavigationLink(destination: DrawerView(llamaState: llamaState)) {
- Text("View Models")
- }
- .padding()
- }
- .padding()
- .navigationBarTitle("Model Settings", displayMode: .inline)
- }
- }
- func sendText() {
- Task {
- await llamaState.complete(text: multiLineText)
- multiLineText = ""
- }
- }
- func bench() {
- Task {
- await llamaState.bench()
- }
- }
- func clear() {
- Task {
- await llamaState.clear()
- }
- }
- struct DrawerView: View {
- @ObservedObject var llamaState: LlamaState
- @State private var showingHelp = false
- func delete(at offsets: IndexSet) {
- offsets.forEach { offset in
- let model = llamaState.downloadedModels[offset]
- let fileURL = getDocumentsDirectory().appendingPathComponent(model.filename)
- do {
- try FileManager.default.removeItem(at: fileURL)
- } catch {
- print("Error deleting file: \(error)")
- }
- }
- // Remove models from downloadedModels array
- llamaState.downloadedModels.remove(atOffsets: offsets)
- }
- func getDocumentsDirectory() -> URL {
- let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
- return paths[0]
- }
- var body: some View {
- List {
- Section(header: Text("Download Models From Hugging Face")) {
- HStack {
- InputButton(llamaState: llamaState)
- }
- }
- Section(header: Text("Downloaded Models")) {
- ForEach(llamaState.downloadedModels) { model in
- DownloadButton(llamaState: llamaState, modelName: model.name, modelUrl: model.url, filename: model.filename)
- }
- .onDelete(perform: delete)
- }
- Section(header: Text("Default Models")) {
- ForEach(llamaState.undownloadedModels) { model in
- DownloadButton(llamaState: llamaState, modelName: model.name, modelUrl: model.url, filename: model.filename)
- }
- }
- }
- .listStyle(GroupedListStyle())
- .navigationBarTitle("Model Settings", displayMode: .inline).toolbar {
- ToolbarItem(placement: .navigationBarTrailing) {
- Button("Help") {
- showingHelp = true
- }
- }
- }.sheet(isPresented: $showingHelp) { // Sheet for help modal
- VStack(alignment: .leading) {
- VStack(alignment: .leading) {
- Text("1. Make sure the model is in GGUF Format")
- .padding()
- Text("2. Copy the download link of the quantized model")
- .padding()
- }
- Spacer()
- }
- }
- }
- }
- }
- struct ContentView_Previews: PreviewProvider {
- static var previews: some View {
- ContentView()
- }
- }
|