Documentation
¶
Overview ¶
Package omnimeet provides a unified abstraction for real-time collaboration platforms.
Package omnimeet provides a unified abstraction for real-time collaboration platforms.
OmniMeet enables AI agents to participate in meetings alongside humans, supporting providers like LiveKit, Daily, Zoom, Google Meet, and more.
Core Concepts ¶
- Meeting: A live collaborative session containing participants and media streams
- Participant: An entity in a meeting (human, AI agent, recorder, observer)
- Track: A media stream (audio, video, screen share, data)
- Event: Real-time events (join, leave, track published, etc.)
Architecture ¶
OmniMeet follows the PlexusOne provider pattern:
- omnimeet-core: Core interfaces and types (this package)
- omni-livekit: LiveKit provider implementation
- omni-daily: Daily provider implementation
- omnimeet: Bundle package with common providers
Basic Usage ¶
import (
"github.com/plexusone/omnimeet"
_ "github.com/plexusone/omni-livekit" // Register provider
)
func main() {
provider, _ := omnimeet.GetMeetingProvider("livekit",
omnimeet.WithAPIKey("..."),
omnimeet.WithAPISecret("..."),
omnimeet.WithServerURL("wss://your-livekit-server.com"),
)
meeting, _ := provider.CreateMeeting(ctx, meeting.CreateRequest{
Name: "Team Standup",
})
token, _ := provider.CreateJoinToken(ctx, token.CreateRequest{
MeetingID: meeting.ID,
Participant: participant.Info{
Name: "AI Assistant",
Kind: participant.KindAgent,
},
})
fmt.Printf("Join URL: %s\n", token.JoinURL)
}
Agent Participation ¶
For AI agents to actively participate in meetings (receiving/publishing audio), use the AgentParticipant interface:
factory := provider.(provider.AgentParticipantFactory)
agent, _ := factory.CreateAgentParticipant(provider.AgentParticipantOptions{})
agent.JoinMeeting(ctx, meeting.ID, token)
defer agent.LeaveMeeting(ctx)
audioCh, _ := agent.SubscribeToAllAudio(ctx)
for frame := range audioCh {
// Process audio with OmniVoice STT
// Generate response with OmniAgent
// Publish response with agent.PublishAudio()
}
Integration with PlexusOne ¶
OmniMeet integrates with other PlexusOne libraries:
- OmniVoice: STT/TTS for speech processing
- OmniAgent: AI agent orchestration
- OmniChat: Meeting invites via messaging
- OmniMemory: Storing meeting transcripts
See https://github.com/plexusone/omnimeet-core for documentation.
Package omnimeet provides a unified abstraction for real-time collaboration platforms.
Package omnimeet provides a unified abstraction for real-time collaboration platforms.
Index ¶
- Constants
- Variables
- func ClearMeetingProviders()
- func GetMeetingProvider(name string, opts ...ProviderOption) (provider.MeetingProvider, error)
- func HasMeetingProvider(name string) bool
- func IsPermanent(err error) bool
- func IsRetryable(err error) bool
- func ListMeetingProviders() []string
- func RegisterMeetingProvider(name string, factory ProviderFactory, priority int)
- func UnregisterMeetingProvider(name string)
- type AgentParticipant
- type AgentParticipantFactory
- type AgentParticipantOptions
- type AudioConfig
- type AudioFrame
- type ConnectionQuality
- type ConnectionState
- type CreateJoinTokenRequest
- type CreateMeetingRequest
- type DataMessage
- type Event
- type EventHandler
- type EventType
- type JoinToken
- type ListMeetingsOptions
- type Meeting
- type MeetingError
- type MeetingProvider
- type MeetingStatus
- type Participant
- type ParticipantInfo
- type ParticipantKind
- type ParticipantPermissions
- type ProviderClient
- type ProviderError
- type ProviderFactory
- type ProviderOption
- type Recording
- type RecordingOptions
- type RecordingProvider
- type RecordingStatus
- type STTConfig
- type STTProvider
- type TTSConfig
- type TTSProvider
- type Track
- type TrackKind
- type TrackSource
- type Transcript
- type TranscriptConfig
- type TranscriptHandler
- type TranscriptSegment
- type TranscriptWord
- type VideoQuality
- type VoiceAgentParticipant
- type VoiceConfig
- type WebhookHandler
Constants ¶
const ( // PriorityThin is for minimal implementations (e.g., stdlib-only). PriorityThin = 0 // PriorityThick is for full SDK implementations. PriorityThick = 10 )
Priority levels for provider registration.
const ( MeetingStatusPending = meeting.StatusPending MeetingStatusActive = meeting.StatusActive MeetingStatusEnded = meeting.StatusEnded )
Meeting status constants
const ( ParticipantKindHuman = participant.KindHuman ParticipantKindAgent = participant.KindAgent ParticipantKindRecorder = participant.KindRecorder ParticipantKindObserver = participant.KindObserver ParticipantKindSIP = participant.KindSIP )
Participant kind constants
const ( ConnectionQualityUnknown = participant.ConnectionQualityUnknown ConnectionQualityExcellent = participant.ConnectionQualityExcellent ConnectionQualityGood = participant.ConnectionQualityGood ConnectionQualityPoor = participant.ConnectionQualityPoor ConnectionQualityLost = participant.ConnectionQualityLost )
Connection quality constants
const ( TrackKindAudio = track.KindAudio TrackKindVideo = track.KindVideo TrackKindData = track.KindData )
Track kind constants
const ( TrackSourceMicrophone = track.SourceMicrophone TrackSourceCamera = track.SourceCamera TrackSourceScreen = track.SourceScreen TrackSourceApplication = track.SourceApplication TrackSourceUnknown = track.SourceUnknown )
Track source constants
const ( EventMeetingCreated = event.TypeMeetingCreated EventMeetingStarted = event.TypeMeetingStarted EventMeetingEnded = event.TypeMeetingEnded EventParticipantJoined = event.TypeParticipantJoined EventParticipantLeft = event.TypeParticipantLeft EventParticipantUpdated = event.TypeParticipantUpdated EventTrackPublished = event.TypeTrackPublished EventTrackUnpublished = event.TypeTrackUnpublished EventTrackMuted = event.TypeTrackMuted EventTrackUnmuted = event.TypeTrackUnmuted EventActiveSpeakerChanged = event.TypeActiveSpeakerChanged EventRecordingStarted = event.TypeRecordingStarted EventRecordingStopped = event.TypeRecordingStopped EventTranscriptUpdated = event.TypeTranscriptUpdated EventDataMessageReceived = event.TypeDataMessageReceived EventConnectionQualityChanged = event.TypeConnectionQualityChanged )
Event type constants
const ( RecordingStatusPending = recording.StatusPending RecordingStatusRecording = recording.StatusRecording RecordingStatusProcessing = recording.StatusProcessing RecordingStatusCompleted = recording.StatusCompleted RecordingStatusFailed = recording.StatusFailed )
Recording status constants
const ( ConnectionStateDisconnected = provider.ConnectionStateDisconnected ConnectionStateConnecting = provider.ConnectionStateConnecting ConnectionStateConnected = provider.ConnectionStateConnected ConnectionStateReconnecting = provider.ConnectionStateReconnecting ConnectionStateFailed = provider.ConnectionStateFailed )
Connection state constants
const Version = "0.1.0"
Version is the current version of omnimeet-core.
Variables ¶
var ( // ErrMeetingNotFound is returned when a meeting cannot be found. ErrMeetingNotFound = errors.New("meeting not found") // ErrMeetingEnded is returned when trying to operate on an ended meeting. ErrMeetingEnded = errors.New("meeting has ended") // ErrMeetingFull is returned when a meeting has reached its participant limit. ErrMeetingFull = errors.New("meeting is full") // ErrParticipantNotFound is returned when a participant cannot be found. ErrParticipantNotFound = errors.New("participant not found") // ErrParticipantAlreadyJoined is returned when a participant tries to join twice. ErrParticipantAlreadyJoined = errors.New("participant already joined") // ErrTrackNotFound is returned when a track cannot be found. ErrTrackNotFound = errors.New("track not found") // ErrTrackAlreadyPublished is returned when trying to publish a duplicate track. ErrTrackAlreadyPublished = errors.New("track already published") // ErrNotConnected is returned when an operation requires a connection. ErrNotConnected = errors.New("not connected to meeting") // ErrAlreadyConnected is returned when trying to connect while already connected. ErrAlreadyConnected = errors.New("already connected to meeting") // ErrConnectionFailed is returned when a connection attempt fails. ErrConnectionFailed = errors.New("connection failed") // ErrTokenExpired is returned when a join token has expired. ErrTokenExpired = errors.New("token expired") // ErrTokenInvalid is returned when a join token is invalid. ErrTokenInvalid = errors.New("token invalid") // ErrPermissionDenied is returned when an operation is not permitted. ErrPermissionDenied = errors.New("permission denied") // ErrRecordingNotFound is returned when a recording cannot be found. ErrRecordingNotFound = errors.New("recording not found") // ErrRecordingAlreadyStarted is returned when trying to start a second recording. ErrRecordingAlreadyStarted = errors.New("recording already started") // ErrRecordingNotStarted is returned when trying to stop a non-existent recording. ErrRecordingNotStarted = errors.New("recording not started") // ErrRecordingNotSupported is returned when recording is not supported. ErrRecordingNotSupported = errors.New("recording not supported by provider") // ErrAgentParticipationNotSupported is returned when agent participation is not supported. ErrAgentParticipationNotSupported = errors.New("agent participation not supported by provider") // ErrProviderNotFound is returned when a provider cannot be found in the registry. ErrProviderNotFound = errors.New("provider not found") // ErrProviderAlreadyRegistered is returned when trying to register a duplicate provider. ErrProviderAlreadyRegistered = errors.New("provider already registered") // ErrInvalidConfiguration is returned when configuration is invalid. ErrInvalidConfiguration = errors.New("invalid configuration") // ErrWebhookValidationFailed is returned when webhook signature validation fails. ErrWebhookValidationFailed = errors.New("webhook validation failed") // ErrRateLimited is returned when rate limited by the provider. ErrRateLimited = errors.New("rate limited") // ErrQuotaExceeded is returned when quota is exceeded. ErrQuotaExceeded = errors.New("quota exceeded") // ErrTimeout is returned when an operation times out. ErrTimeout = errors.New("operation timed out") )
Common errors
var DefaultAgentPermissions = participant.DefaultAgentPermissions
DefaultAgentPermissions returns the default permissions for an AI agent.
var DefaultAudioConfig = provider.DefaultAudioConfig
DefaultAudioConfig returns the default audio configuration.
var DefaultHumanPermissions = participant.DefaultHumanPermissions
DefaultHumanPermissions returns the default permissions for a human participant.
var DefaultObserverPermissions = participant.DefaultObserverPermissions
DefaultObserverPermissions returns the default permissions for an observer.
var DefaultRecorderPermissions = participant.DefaultRecorderPermissions
DefaultRecorderPermissions returns the default permissions for a recorder.
var FromTTSResult = voice.FromTTSResult
FromTTSResult converts an OmniVoice TTS result to a meeting AudioFrame.
var NewVoiceAgentParticipant = voice.NewVoiceAgentParticipant
NewVoiceAgentParticipant creates a new VoiceAgentParticipant.
var ToSTTFormat = voice.ToSTTFormat
ToSTTFormat converts a meeting AudioFrame to OmniVoice STT format.
Functions ¶
func ClearMeetingProviders ¶
func ClearMeetingProviders()
ClearMeetingProviders removes all meeting providers from the registry. This is primarily useful for testing.
func GetMeetingProvider ¶
func GetMeetingProvider(name string, opts ...ProviderOption) (provider.MeetingProvider, error)
GetMeetingProvider returns a meeting provider by name.
func HasMeetingProvider ¶
HasMeetingProvider returns true if a meeting provider is registered.
func IsPermanent ¶
IsPermanent returns true if the error is permanent (not retryable).
func IsRetryable ¶
IsRetryable returns true if the error is retryable.
func ListMeetingProviders ¶
func ListMeetingProviders() []string
ListMeetingProviders returns the names of all registered meeting providers.
func RegisterMeetingProvider ¶
func RegisterMeetingProvider(name string, factory ProviderFactory, priority int)
RegisterMeetingProvider registers a meeting provider factory.
If a provider with the same name is already registered, it will be replaced only if the new provider has equal or higher priority.
func UnregisterMeetingProvider ¶
func UnregisterMeetingProvider(name string)
UnregisterMeetingProvider removes a meeting provider from the registry. This is primarily useful for testing.
Types ¶
type AgentParticipant ¶
type AgentParticipant = provider.AgentParticipant
AgentParticipant represents an AI agent's participation in a meeting.
type AgentParticipantFactory ¶
type AgentParticipantFactory = provider.AgentParticipantFactory
AgentParticipantFactory creates AgentParticipant instances.
type AgentParticipantOptions ¶
type AgentParticipantOptions = provider.AgentParticipantOptions
AgentParticipantOptions contains options for creating an AgentParticipant.
type AudioConfig ¶
type AudioConfig = provider.AudioConfig
AudioConfig specifies the audio configuration for an agent.
type AudioFrame ¶
type AudioFrame = provider.AudioFrame
AudioFrame represents a frame of audio data.
type ConnectionQuality ¶
type ConnectionQuality = participant.ConnectionQuality
ConnectionQuality indicates the quality of a participant's connection.
type ConnectionState ¶
type ConnectionState = provider.ConnectionState
ConnectionState represents the connection state.
type CreateJoinTokenRequest ¶
type CreateJoinTokenRequest = token.CreateRequest
CreateJoinTokenRequest contains the parameters for creating a join token.
type CreateMeetingRequest ¶
type CreateMeetingRequest = meeting.CreateRequest
CreateMeetingRequest contains the parameters for creating a new meeting.
type DataMessage ¶
type DataMessage = provider.DataMessage
DataMessage represents a data message sent between participants.
type EventHandler ¶
EventHandler is a function that handles events.
type ListMeetingsOptions ¶
type ListMeetingsOptions = meeting.ListOptions
ListMeetingsOptions contains options for listing meetings.
type MeetingError ¶
MeetingError wraps an error with meeting context.
func NewMeetingError ¶
func NewMeetingError(meetingID, op string, err error) *MeetingError
NewMeetingError creates a new MeetingError.
func (*MeetingError) Unwrap ¶
func (e *MeetingError) Unwrap() error
Unwrap returns the underlying error.
type MeetingProvider ¶
type MeetingProvider = provider.MeetingProvider
MeetingProvider is the core interface that all meeting providers must implement.
type MeetingStatus ¶
MeetingStatus represents the current state of a meeting.
type Participant ¶
type Participant = participant.Participant
Participant represents an entity that joins a meeting.
type ParticipantInfo ¶
type ParticipantInfo = participant.Info
ParticipantInfo contains information for creating or identifying a participant.
type ParticipantKind ¶
type ParticipantKind = participant.Kind
ParticipantKind represents the type of participant.
type ParticipantPermissions ¶
type ParticipantPermissions = participant.Permissions
ParticipantPermissions defines what a participant is allowed to do.
type ProviderClient ¶
type ProviderClient = provider.Client[provider.MeetingProvider]
ProviderClient manages multiple meeting providers.
func NewProviderClient ¶
func NewProviderClient(primary MeetingProvider, fallbacks ...MeetingProvider) *ProviderClient
NewProviderClient creates a new provider client.
type ProviderError ¶
ProviderError wraps an error with provider context.
func NewProviderError ¶
func NewProviderError(provider, op string, err error) *ProviderError
NewProviderError creates a new ProviderError.
func (*ProviderError) Error ¶
func (e *ProviderError) Error() string
Error returns the error message.
func (*ProviderError) Unwrap ¶
func (e *ProviderError) Unwrap() error
Unwrap returns the underlying error.
type ProviderFactory ¶
type ProviderFactory func(config map[string]any) (provider.MeetingProvider, error)
ProviderFactory is a function that creates a MeetingProvider.
type ProviderOption ¶
type ProviderOption func(*providerConfig)
ProviderOption is an option for provider creation.
func WithAPIKey ¶
func WithAPIKey(apiKey string) ProviderOption
WithAPIKey sets the API key for the provider.
func WithAPISecret ¶
func WithAPISecret(apiSecret string) ProviderOption
WithAPISecret sets the API secret for the provider.
func WithConfig ¶
func WithConfig(config map[string]any) ProviderOption
WithConfig sets configuration values for the provider.
func WithServerURL ¶
func WithServerURL(url string) ProviderOption
WithServerURL sets the server URL for the provider.
func WithWebhookSecret ¶
func WithWebhookSecret(secret string) ProviderOption
WithWebhookSecret sets the webhook secret for signature validation.
type RecordingOptions ¶
RecordingOptions contains options for starting a recording.
type RecordingProvider ¶
type RecordingProvider = provider.RecordingProvider
RecordingProvider is an optional interface for providers that support recording.
type RecordingStatus ¶
RecordingStatus represents the status of a recording.
type STTConfig ¶
type STTConfig = stt.TranscriptionConfig
STTConfig configures speech-to-text (from omnivoice-core).
type STTProvider ¶
STTProvider is the interface for speech-to-text providers (from omnivoice-core).
type TTSConfig ¶
type TTSConfig = tts.SynthesisConfig
TTSConfig configures text-to-speech (from omnivoice-core).
type TTSProvider ¶
TTSProvider is the interface for text-to-speech providers (from omnivoice-core).
type Transcript ¶
type Transcript = transcript.Transcript
Transcript represents a meeting transcript.
type TranscriptConfig ¶
type TranscriptConfig = transcript.Config
TranscriptConfig contains configuration for transcription.
type TranscriptHandler ¶
type TranscriptHandler = voice.TranscriptHandler
TranscriptHandler is called when speech is transcribed.
type TranscriptSegment ¶
type TranscriptSegment = transcript.Segment
TranscriptSegment represents a segment of a transcript.
type TranscriptWord ¶
type TranscriptWord = transcript.Word
TranscriptWord represents a word with timing information.
type VideoQuality ¶
type VideoQuality = track.VideoQuality
VideoQuality represents the quality level for video tracks.
type VoiceAgentParticipant ¶
type VoiceAgentParticipant = voice.VoiceAgentParticipant
VoiceAgentParticipant wraps AgentParticipant with OmniVoice integration.
type VoiceConfig ¶
VoiceConfig configures the VoiceAgentParticipant.
type WebhookHandler ¶
type WebhookHandler = provider.WebhookHandler
WebhookHandler is an optional interface for providers that support webhooks.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package agent provides OmniAgent integration for OmniMeet.
|
Package agent provides OmniAgent integration for OmniMeet. |
|
Package event provides event types for OmniMeet.
|
Package event provides event types for OmniMeet. |
|
examples
|
|
|
basic-agent
command
Example: basic-agent demonstrates an AI agent joining a LiveKit meeting.
|
Example: basic-agent demonstrates an AI agent joining a LiveKit meeting. |
|
omniagent-integration
command
Example: omniagent-integration demonstrates how to add meeting capabilities to OmniAgent.
|
Example: omniagent-integration demonstrates how to add meeting capabilities to OmniAgent. |
|
Package meeting provides the core Meeting type and related types for OmniMeet.
|
Package meeting provides the core Meeting type and related types for OmniMeet. |
|
Package participant provides the Participant type and related types for OmniMeet.
|
Package participant provides the Participant type and related types for OmniMeet. |
|
Package provider defines the core provider interfaces for OmniMeet.
|
Package provider defines the core provider interfaces for OmniMeet. |
|
Package recording provides recording types for OmniMeet.
|
Package recording provides recording types for OmniMeet. |
|
Package skill provides an omniskill-compatible meeting skill for OmniAgent.
|
Package skill provides an omniskill-compatible meeting skill for OmniAgent. |
|
Package token provides join token types for OmniMeet.
|
Package token provides join token types for OmniMeet. |
|
Package track provides the Track type and related types for OmniMeet.
|
Package track provides the Track type and related types for OmniMeet. |
|
Package transcript provides transcript types for OmniMeet.
|
Package transcript provides transcript types for OmniMeet. |
|
Package voice provides integration between OmniMeet and OmniVoice.
|
Package voice provides integration between OmniMeet and OmniVoice. |