62 lines
2.7 KiB
Swift
62 lines
2.7 KiB
Swift
import Foundation
|
|
import Testing
|
|
@testable import Sybil
|
|
|
|
@Suite
|
|
struct SybilInlineMentionTests {
|
|
@Test func recognizesLiteralCaseInsensitiveTokens() {
|
|
#expect(SybilInlineMention.hasExplicitSybilMention(in: "@sybil"))
|
|
#expect(SybilInlineMention.hasExplicitSybilMention(in: "Could you help, @SYBIL?"))
|
|
#expect(SybilInlineMention.hasExplicitSybilMention(in: "Please ask (@SyBiL), thanks."))
|
|
}
|
|
|
|
@Test func ignoresEmailAddresses() {
|
|
#expect(!SybilInlineMention.hasExplicitSybilMention(in: "Send mail to person@sybil.example"))
|
|
#expect(!SybilInlineMention.hasExplicitSybilMention(in: "Mailbox: first.last+tag@sybil"))
|
|
}
|
|
|
|
@Test func ignoresInlineFencedAndIndentedCode() {
|
|
#expect(!SybilInlineMention.hasExplicitSybilMention(in: "Run `@sybil` after the build."))
|
|
#expect(!SybilInlineMention.hasExplicitSybilMention(in: "Inline `example\n@sybil` across lines."))
|
|
#expect(!SybilInlineMention.hasExplicitSybilMention(in: "```swift\n@sybil\n```"))
|
|
#expect(!SybilInlineMention.hasExplicitSybilMention(in: "~~~\n@sybil\n~~~"))
|
|
#expect(!SybilInlineMention.hasExplicitSybilMention(in: " @sybil\n\t@sybil"))
|
|
}
|
|
|
|
@Test func ignoresMarkdownBlockquotesAndLazyContinuation() {
|
|
#expect(!SybilInlineMention.hasExplicitSybilMention(in: "> @sybil\ncontinued @sybil"))
|
|
#expect(!SybilInlineMention.hasExplicitSybilMention(in: " > @SYBIL"))
|
|
#expect(SybilInlineMention.hasExplicitSybilMention(in: "> quoted @sybil\n\n@sybil"))
|
|
}
|
|
|
|
@Test func streamMetaAcceptsOptionalAgentAsideFlag() throws {
|
|
let legacyData = Data(#"{"chatId":"chat-1","provider":"openai","model":"test-model"}"#.utf8)
|
|
let legacy = try JSONDecoder().decode(CompletionStreamMeta.self, from: legacyData)
|
|
#expect(legacy.agentAside == nil)
|
|
|
|
let asideData = Data(#"{"chatId":"chat-1","provider":"openai","model":"test-model","agentAside":true}"#.utf8)
|
|
let aside = try JSONDecoder().decode(CompletionStreamMeta.self, from: asideData)
|
|
#expect(aside.agentAside == true)
|
|
}
|
|
|
|
@Test func asidePresentationUsesAssistantMetadata() {
|
|
let assistantAside = Message(
|
|
id: "message-1",
|
|
createdAt: .now,
|
|
role: .assistant,
|
|
content: "An Agent reply",
|
|
name: "Sybil Agent",
|
|
metadata: .object(["agentAside": .bool(true)])
|
|
)
|
|
let ordinaryAssistant = Message(
|
|
id: "message-2",
|
|
createdAt: .now,
|
|
role: .assistant,
|
|
content: "A provider reply",
|
|
name: nil
|
|
)
|
|
#expect(assistantAside.isAgentAside)
|
|
#expect(!ordinaryAssistant.isAgentAside)
|
|
}
|
|
}
|