我已经尝试了将近一个星期,以找出为什么在这门课上课时什么也没有打印出来
class IntentHandler: INExtension {
override func handler(for intent: INIntent) -> Any {
guard intent is PromptIntent else {
fatalError("Unhandled Intent error : \(intent)")
}
print("IntentHandler has run")
return PromptIntentHandler()
}
}
另外,作为这个问题的延伸,我似乎找不到原因,不管实际变量是什么,这段代码总是返回默认大小写:
//MARK: PromptIntentHandler (API)
class PromptIntentHandler: NSObject, PromptIntentHandling {
let openAI = OpenAI(apiToken: "myAPIKey")
let defaults = UserDefaults.standard
func setModelType() -> Model {
let modelType = ((defaults.string(forKey: "ModelType") ?? "None") as String)
switch modelType {
case "Plus":
print("Plan is Plus")
return .curie
case "Pro":
print("Plan is Pro")
return .textDavinci_003
case "Ultra":
print("Plan is Ultra")
return .textDavinci_003
default:
print("User isn't subscriped")
return .ada
}
}
func handle(intent: PromptIntent, completion: @escaping (PromptIntentResponse) -> Void) {
openAI.completions(query: .init(
model: setModelType(),
prompt: intent.query!,
temperature: 0,
max_tokens: 200,
top_p: 1,
frequency_penalty: 1,
presence_penalty: 2,
stop: ["\\n"])) { result in
switch result {
case .success(let response):
let outputText = response.choices.first?.text
completion(.success(answer: outputText!))
print(outputText!)
case .failure(let error):
print(error.localizedDescription)
}
}
}
func resolveQuery(for intent: PromptIntent, with completion: @escaping (INStringResolutionResult) -> Void) {
// check if the intent's query is empty
if intent.query == nil || intent.query!.isEmpty {
// if yes, return a need value resolution result
completion(INStringResolutionResult.needsValue())
} else {
// otherwise, return a success resolution result with the query
completion(INStringResolutionResult.success(with: intent.query ?? ""))
}
}
}
和头等舱一样,也没有打印。更糟糕的是,开关总是返回默认值。我在其他地方有这段代码作为完整性检查,它工作得很好,返回预期值并打印预期语句(我的计划是 Ultra):
let defaults = UserDefaults.standard
print((defaults.string(forKey: "ModelType") ?? "None") as String)
if ((defaults.string(forKey: "ModelType") ?? "None") as String) == "Ultra" {
print("Ultra")
} else {
print("Something is wrong")
}
如果有人能提供一些关于为什么会发生这些事情的见解,我将非常感激。非常感谢您能为我提供的任何帮助!
我已经尝试了一切,从不同文件共享的不同变量,同一文件中的所有内容,到用户默认值,再到 if else 语句、开关、函数。我将其隔离为 class IntentHandler: INExtension { } 和 class PromptIntentHandler: NSObject, PromptIntentHandling { } 发生的一些奇怪的事情。
不同的目标成员可能是问题所在吗?我错过了这些课程有什么特别之处吗?是别的东西吗?我不知道!