______ ______ ___ ____ / ____ / ___ / ____ / __ ____ / | / _ / / / __ / __ / / __ / _ / __ / / | | / / / / _ / / / _ / / / _ / / __ / / / / ___ | _ / / un chat d'interface de terminal riche ____ / ____ / ____ / ___ / _ / / _ / _ / | _ / ___ / écrit dans Go. Créez des systèmes simples, sécurisés et évolutifs avec GO. Copyright (© ️) 2024 @ H0LLYW00DZZ Tous droits réservés.
Remarque: Ce référentiel est un travail en cours (WIP).
Temps d'arrivée estimé (ETA): inconnu . Ce projet est développé sur une base personnelle pendant mon temps libre et n'est associé à aucune entreprise ou entreprise d'entreprise.
Intéressant de le construire dans Terminal après avoir tourné par le voyage à travers le langage de programmation Go, ainsi que pour explorer les capacités de l'IA de Google (actuellement en version bêta avec des Gémeaux).
Note
Ce référentiel est spécialement conçu pour adhérer aux principes GO idiomatiques. ?
Le développement de GO favorise l'évolutivité. Sa conception centrée sur les performances prend en charge un traitement simultané et une gestion efficace des ressources, ce qui en fait un excellent choix pour les applications qui doivent évoluer de manière transparente avec une demande croissante.
La gestion de la mémoire de GO et le typage statique réduisent considérablement la survenue de bogues critiques tels que les fuites de mémoire, qui sont répandues dans les langues interprétées. Cette stabilité est cruciale pour les applications terminales de longue durée qui interagissent avec les services d'IA.
Note
Memory leaks sont une préoccupation critique, en particulier dans le développement de l'IA. L'approche de Go de la gestion de la mémoire le distingue, car elle atténue de tels problèmes plus efficacement que certaines autres langues. Ceci contraste fortement avec de nombreux référentiels dans d'autres langues où les fuites de mémoire sont un problème fréquent et souvent déroutant (que je ne comprends pas quand il y a un autre repo dans github ).
GitHub que je ne comprends pas putain. Fait amusant : le saviez-vous? Si votre code Go ressemble à une jungle de déclarations if (pensez à plus de 10 couches imbriquées - un grand non-non!), C'est moins Go et plus Stop-and-ask-for-directions . Aplatissez ces conditions et laissez votre code fonctionner aussi bien qu'un gopher graissé sur une glissière de glissement! ?
Note
Cette caractéristique spécialisée Realistic Typing Animation est économique en termes de consommation de ressources (par exemple, memory,cpu ), contrairement aux front-end languages ou other languages qui ont tendance à être plus à forte intensité de ressources.
:quit , par exemple, permet aux utilisateurs de mettre fin à leur session de manière ordonnée. Lorsque cette commande est exécutée, elle invite une séquence d'arrêt coopérative avec l'IA, ce qui génère un message d'adieu approprié. Cette conception réfléchie améliore l'expérience utilisateur en fournissant une fermeture conversationnelle à la fois naturelle et polie, garantissant que la fin de la session est aussi engageante que la conversation elle-même.DebugOrErrorLogger Le package DebugOrErrorLogger propose un système de journalisation rationalisé et efficace, conçu spécifiquement pour les applications GO qui nécessitent une erreur robuste et des capacités de journalisation de débogage avec des frais généraux minimaux.DebugOrErrorLogger Clés Fonctionnalités ? Logotation de débogage conditionnelle : L'enregistreur permet aux messages de débogage d'être sortis conditionnellement en fonction de la variable d'environnement DEBUG_MODE . Lorsqu'ils sont définis sur true , des informations de débogage détaillées seront imprimées sur os.Stderr , en aidant dans le processus de développement et de dépannage.
? Erreur codé en couleur Sortie : les erreurs sont nettement colorisées en rouge lorsqu'elles sont enregistrées, ce qui les fait se démarquer dans le terminal pour une attention immédiate. Cette colorisation aide à identifier rapidement les erreurs au milieu d'autres sorties de journal.
? ? Récupération de panique : une fonction de récupération est fournie pour gérer et enregistrer gracieusement toutes les paniques qui peuvent se produire pendant l'exécution. Cette fonction garantit qu'un message de panique est clairement connecté à la sortie colorisée, empêchant l'application de s'écraser de façon inattendue et d'aider à un diagnostic rapide.
⚡ API simple : Le package expose une API simple et intuitive, avec des méthodes de journalisation de débogage et d'erreur qui acceptent les chaînes de format et les arguments variadiques, similaires aux fonctions standard Printf et Println .
? Configuration de la variable d'environnement : le mode de débogage peut être facilement activé ou désactivé via une variable d'environnement, permettant une configuration flexible sans avoir besoin de recompiler l'application.
Note
Les Current Features énumérées ci-dessus peuvent être obsolètes. Pour les mises à jour des fonctionnalités les plus récentes, veuillez lire la documentation here .
Note
Le terme Streamlined Codebase fait référence à un modèle commun de haut niveau dans la programmation Go . Ce modèle met l'accent sur une structure propre et bien organisée, qui facilite la compréhension et le maintien du code. Cela implique généralement de séparer les préoccupations, de modulariser les composants et de suivre les pratiques idiomatiques pour créer une base de code à la fois efficace et facile à travailler.
Note
Cette fonctionnalité spécialisée, mieux que le code ressemble à une jungle de if if if if les instructions ont été intégrées avec succès.
En adoptant ce système de gestion de commandes évolutif, l'application de chat est bien placée pour évoluer aux côtés des progrès des attentes de l'IA et des utilisateurs, garantissant une expérience utilisateur robuste et futur.
Note
Sujet Planifiant pour améliorer et ajouter en continu des fonctionnalités, améliorant les fonctionnalités sans ajouter de complexité inutile. Restez à l'écoute pour les mises à jour!
Go est conçu pour être simple et efficace, en évitant les complexités inutiles (complexités de baise, ce sont go anti-complexités) souvent rencontrées dans d'autres langages de programmation.
Utilisation optimisée des ressources : le chat terminal Gogenai est conçu pour maximiser les performances tout en minimisant l'utilisation des ressources. En tirant parti du modèle de compilation et d'exécution efficace de GO, l'application assure des temps de réponse rapides et des surcharges faibles, ce qui le rend idéal pour les systèmes où la conservation des ressources est primordiale.
Gestion efficace de la concurrence : grâce aux goroutines légères de Go et aux primitives de synchronisation efficaces, le chat terminal Gogenai gère facilement les opérations simultanées. L'application peut servir plusieurs utilisateurs simultanément sans augmentation significative de la latence ou de l'utilisation de la mémoire, garantissant des performances cohérentes même sous charge.
Ce référentiel contient du code GO de haute qualité qui se concentre en particulier sur Retry Policy Logic , Chat System Logic et Other . Chaque fonction est conçue pour simplicity , évitant délibérément stupid complexity inutile, même dans des scénarios qui pourraient potentiellement dépasser un score stupid complexity de 10+ .
Pour utiliser le chat d'interface de terminal Gogenai, vous devez faire installer Docker sur votre machine. Si Docker n'est pas installé, veuillez suivre le guide d'installation officiel de Docker.
Une fois Docker configuré, vous pouvez tirer l'image à partir des packages GitHub en fonctionnant:
docker pull ghcr.io/h0llyw00dzz/gogenai-terminal-chat:latestConseil
Pour la programmation Master ou Advanced de Go Programming , en particulier celles de cloud engineering , ce GoGenAI Terminal Interface Chat peut être exécuté dans un Cloud Shell ( for example, Google Cloud Shell ) sans utiliser Docker.
Pour démarrer une session de chat avec Gogenai, exécutez la commande suivante dans votre terminal. Assurez-vous de remplacer YOUR_API_KEY par la clé API réelle qui vous est fournie.
Avertissement
En raison de ce problème here pour démarrer une session de chat avec GoGenAI , utilisez un meilleur terminal qui peut gérer une constant dans ce référentiel ou construire votre propre système d'exploitation avec un meilleur noyau qui peut gérer constant dans ce référentiel
docker run -it --rm --name mychatapp -e API_KEY=YOUR_API_KEY ghcr.io/h0llyw00dzz/gogenai-terminal-chat:latestCette commande démarrera l'application de chat terminale Gogenai en mode interactif. Vous pourrez taper vos messages et recevoir des réponses de l'IA.
Les variables d'environnement sont des paires de valeurs clés qui peuvent affecter le comportement de votre application. Vous trouverez ci-dessous un tableau des variables environnementales utilisées dans l'application de Gégenai-terminal-CAM, ainsi que leurs descriptions et si elles sont nécessaires.
| Variable | Description | Requis |
|---|---|---|
API_KEY | Votre clé API pour accéder au modèle générateur d'IA. Obtenez une clé API gratuite ici. | Oui |
DEBUG_MODE | Réglé sur true pour activer DEBUG_MODE , ou false pour le désactiver. | Non |
SHOW_PROMPT_FEEDBACK | Définir true pour afficher les commentaires de l'invite dans le pied de page de réponse, ou false pour le masquer. | Non |
SHOW_TOKEN_COUNT | Réglé sur true pour afficher le nombre de jetons utilisés dans la réponse et l'historique de chat de l'IA, ou false pour le masquer. | Non |
Note
Les mesures Average Consumption sont calculées sans inclure l'utilisation d'un système de stockage comme une base de données et sont basées sur l'hypothèse que chaque fonction est relativement simple, avec une complexité cyclomatique moyenne de 5 comme maximum. Cependant, la consommation peut augmenter avec des fonctions plus complexes (par exemple, celles avec une complexité cyclomatique de 10 ou plus, qui ne sont pas recommandées).
Note
Les mesures Average Maximum Consumption sont basées sur la simulation du comportement de frappe human . Cela implique de rendre les réponses de chat Le caractère par caractère pour imiter le rythme et le rythme de la frappe human .
Avertissement
Ces screenshots peuvent être obsolètes en raison des modifications de la version.
Note
Ce ? Simple Debugging est simple contrairement à la merde, à des go codes logique complexes qui augmentent la cyclomatic complexity
? Vous: Bonjour, êtes-vous?
? AI :: Je suis un modèle de langue large, formé par Google.
? Vous: J'ai une question sur les K8, comment puis-je activer la journalisation de l'audit à Kubernetes, et que dois-je rechercher lors de l'analyse des journaux?
? AI: Pour activer la journalisation d'audit à Kubernetes, vous pouvez utiliser les étapes suivantes:
/etc/kubernetes/manifests/kube-apiserver.yaml .audit-policy : enabled: true
En éventuellement, vous pouvez configurer les paramètres suivants:
policyFile : le chemin d'accès à un fichier contenant les règles de politique d'audit.logPath : le chemin d'accès au fichier où les journaux d'audit seront stockés.logFormat : le format des journaux d'audit.maxBatchSize : le nombre maximum d'événements d'audit à inclure dans un seul lot.maxBatchWait : le temps maximum pour attendre un lot d'événements d'audit à remplir avant de les écrire sur le disque.Enregistrez et redémarrez le serveur API Kubernetes.
Une fois la journalisation d'audit activée, vous pouvez analyser les journaux pour obtenir des informations sur l'activité de votre cluster Kubernetes. Certaines choses que vous voudrez peut-être rechercher comprennent:
En analysant les journaux d'audit, vous pouvez identifier les risques de sécurité, résoudre les problèmes et mieux comprendre comment votre cluster Kubernetes est utilisé.
Voici quelques ressources supplémentaires que vous pourriez trouver utiles:
$ go run cmd/main.go? AI: Bonjour! Comment puis-je vous aider aujourd'hui?
? Vous: J'ai des questions que cela est correct concernant "Serctivez la simplicité dans chaque fonction (visez une complexité cyclomatique de moins de 5 ans pour démontrer l'expertise); la simplicité est un signe de maîtrise de la programmation de GO." ?
? AI: Oui, l'énoncé "efforce de simplicité dans chaque fonction (viser une complexité cyclomatique de moins de 5 ans pour démontrer l'expertise); la simplicité est un signe de maîtrise de programmation GO" est généralement correct.
La complexité cyclomatique est une mesure de la complexité d'une fonction. Il est calculé en comptant le nombre de chemins indépendants à travers la fonction. Une complexité cyclomatique élevée indique que la fonction est difficile à comprendre et à maintenir.
La simplicité est un principe clé de la programmation GO. Le code GO est généralement concis et facile à lire. Cela facilite la compréhension et le maintien.
Viser une complexité cyclomatique de moins de 5 ans est un bon moyen de vous assurer que vos fonctions sont simples et faciles à comprendre. Cela vous aidera à écrire un meilleur code et à éviter d'introduire des bogues.
Bien sûr, il y a des moments où il est nécessaire d'écrire des fonctions plus complexes. Cependant, vous devez toujours vous efforcer de simplifier chaque fois que possible.
Voici quelques conseils pour écrire des fonctions simples:
En suivant ces conseils, vous pouvez écrire des fonctions simples et faciles à comprendre qui rendront votre code plus maintenable et sans bug.
? Vous: bien merci pour des informations
? AI: Vous êtes les bienvenus! Je suis content de pouvoir être utile. Si vous avez d'autres questions, n'hésitez pas à poser.
? Vous :: quittez
? AI: Ce fut un plaisir de vous aider aujourd'hui. N'oubliez pas que je suis toujours là si vous avez d'autres questions. Faites attention et passez une merveilleuse journée!
L'application GOGENAI Terminal Chat fournit une interface de ligne de commande pour les utilisateurs pour interagir avec un modèle d'IA génératif. L'application gère les entrées utilisateur, traite les commandes, communique avec l'IA et maintient un historique de chat. Il est conçu pour être extensible et évolutif pour s'adapter à la croissance future et aux fonctionnalités supplémentaires.
L'architecture simple est conçue pour des cas d'utilisation simples et fournit la fonctionnalité de base requise pour une application de chat basée sur un terminal.
Organigramme LR
Start ([start]) -> | utilisateur exécute l'application | Init [initialiser la session]
Init -> | Configurer la manipulation du signal | SignalHandler [Gandage des signaux du système d'exploitation]
Init -> | Chargez la clé de l'API | APIKEYVALIDATION {Validation des clés de l'API}
Apikeyvalidation -> | valide | SetupClient [Configuration du client AI]
Apikeyvalidation -> | invalide | Fin ([fin])
SetupClient -> | Client Ready | Mainloop [Entrez la boucle principale]
Mainloop -> userInput [/ user input /]
UserInput -> | Commande | CommandHandler [manche command]
UserInput -> | Message de chat | SendMessage [Envoyer un message à AI]
CommandHandler -> | quit | Fin
CommandHandler -> | Autres commandes | ProcessCommand [Commande de processus]
SendMessage -> | Recevoir une réponse AI | UpdateHistory [Update Chat History]
UpdateHistory -> afficheResponse [Afficher la réponse AI]
ProcessCommand -> Mainloop
DisplayResponse -> Mainloop
SignalHandler -> | Sigint / Sigterm | Nettoyage [Ressources de nettoyage]
Nettoyage -> fin
L'architecture évolutive est conçue pour gérer la croissance, permettant l'ajout de nouvelles commandes, une amélioration des erreurs et des interactions plus complexes avec les API externes.
Organigramme LR
Start ([start]) -> | utilisateur exécute l'application | Init [initialiser la session]
Init -> | Configurer la manipulation du signal | SignalHandler [Gandage des signaux du système d'exploitation]
Init -> | Chargez la clé de l'API | APIKEYVALIDATION {Validation des clés de l'API}
Apikeyvalidation -> | valide | SetupClient [Configuration du client AI]
Apikeyvalidation -> | invalide | Fin ([fin])
SetupClient -> | Client Ready | Mainloop [Entrez la boucle principale]
Mainloop -> userInput [/ user input /]
UserInput -> | Commande | CommandRegistry [Command Registry]
UserInput -> | Message de chat | SendMessage [Envoyer un message à AI]
CommandRegistry -> | quit | Fin
CommandRegistry -> | Autres commandes | ProcessCommand [Commande de processus]
CommandRegistry -> | Count de jetons | TokenCountingProcess [processus de comptage de jetons]
CommandRegistry -> | Vérifier le modèle | CheckModelProcess [CheckModelProcess]
SendMessage -> | Recevoir une réponse AI | UpdateHistory [Update Chat History]
TokencuntingProcess -> | Recevoir une réponse AI | DisplayResponse [Afficher la réponse AI]
CheckModelProcess -> | Recevoir une réponse AI | DisplayResponse [Afficher la réponse AI]
UpdateHistory -> afficheResponse [Afficher la réponse AI]
ProcessCommand -> Mainloop
DisplayResponse -> Mainloop
SignalHandler -> | Sigint / Sigterm | Nettoyage [Ressources de nettoyage]
Nettoyage -> fin
ProcessCommand -> | Interaction API | Apiclient [client API]
APICLIENT -> | Réponse API | ProcessCommand
APICLIENT -> | Erreur API | ErrorHandler [Handler d'erreur]
ErrorHandler -> | Gire Error | ProcessCommand
ErrorHandler -> | Erreur fatale | Fin
TokencountingProcess -> | Traitement simultané | Processeur concurrent [Processeur simultané]
ConcurrentProcessor -> | Résultats agrégés | Tokencouting process
ConcurrentProcessor -> | Erreur | ErrorHandler [Handler d'erreur]
CLASSDEF SCALABLE FILL: # 4C9F70, trait: # 333, largeur de course: 2px;
Class CommandRegistry, apiclient, concurrentProcessor Scapable;
Note
Dans le diagramme ci-dessus, les composants avec une couleur de remplissage green ( #4c9f70 ) sont conçus pour être évolutifs, indiquant qu'ils peuvent gérer la croissance et une charge accrue efficacement. Ces composants incluent le Command Registry , API Client et Concurrent Processor .
Note
L' Scalable System's Architecture présente une gestion efficace de la complexité par la simplicité. Dans cette application GO, chaque fonction est conçue pour maintenir une cyclomatic complexity of 5 ou less .
Veuillez vous référer à nos Contribution Guidelines pour des informations détaillées sur la façon dont vous pouvez contribuer à ce projet.
Note
Il s'agit d'une liste de tâches pour améliorer, fixer et améliorer les fonctionnalités de ce projet. Les tâches sont ajoutées à ce fichier readme.md pour s'assurer qu'ils ne sont pas oubliés pendant le processus de développement.
Note
Le Reporting System est conçu pour capturer et gérer les événements de panique d'exécution dans l'application Go, facilitant les rapports et l'analyse des erreurs rationalisées.
Note
La fonction Create a Convert Result Table feature est conçue pour reformater la sortie de l'AI dans une structure tabulaire.
Note
La fonction Enable Additional Responses est conçue pour permettre des réponses supplémentaires de l'IA, telles que la rétroaction rapide. Pour activer cette fonctionnalité, utilisez la Environment Variable Configuration .
Implémenter toutes les fonctionnalités non implémentées
Posser des goroutines supplémentaires
Note
Les fonctionnalités de Processing Multiple Image & Text Datasets for Token Counting sont protégées contre race conditions et deadlocks . De plus, ils peuvent gérer efficiently multiple text data ou multiple image data .
Note
L' Pin Each Message for a Simpler Context Prompt est conçu pour épingler les messages chargés à partir de fichiers tels que json/txt/md . Cette fonctionnalité fonctionne exceptionnellement bien avec une résumé automatisé ou manuel, par opposition à une interpreted language hahaha.
Note
La fonction Implement Gemini-Pro Vision Capabilities est stratégiquement intégrée dans les fonctionnalités de commande, telles que la comparaison d'images, l'analyse d'image, etc.
Note
Ce système est écrit en go , assurant Scalability et Stability . ?
:help Note
La fonction Automate Summarizing Conversations est conçue pour résumer automatiquement une conversation de manière similaire à ChatGptNextWeb. Cependant, il est construit dans une interface terminale, ce qui le rend plus accessible et abordable OpenAI . De plus, puisque cette interface terminale est écrite en Go, elle permet la création de systèmes simples, sécurisés et évolutifs.
eg, issues with executing a scalable command handler ) :aitranslate Note
L' Improve :aitranslate commands visent à améliorer les capacités de traduction, y compris la traduction à partir de fichiers, de marquage, de documents, de CSV et potentiellement plus. Comme il est écrit dans Go, qui a une bibliothèque standard puissante ?, Vous pouvez, par exemple, utiliser la commande :aitranslate :file data.csv .
:safety AIResponse en stockant la réponse d'IA originale dans ChatHistory Note
L'amélioration, Improve AIResponse by Storing the Original AI Response in ChatHistory , implique de sauver la réponse originale de l'IA dans ChatHistory . De plus, cette action déclenche automatiquement des améliorations pour la fonction Colorize .
ChatHistory en synchronisant automatiquement pour une utilisation multimodale ( gemini-pro-vision ) Note
L'amélioration Leverage ChatHistory by automatically syncing for multi-modal use (gemini-pro-vision) , utilise ChatHistory comme une solution de stockage de données très efficace et en mémoire contrairement à écrit en C ou à une autre langue qui provoque memory leaks . Cela garantit une synchronisation transparente et des performances optimales sur divers modes.
[Explicite] La retry policy est appliquée dynamiquement à la goroutine principale, permettant des tentatives indépendantes d'erreur et de réessayer.
[Explicite] Améliorez la gestion des messages Error pour le rendre plus dynamique.
Error pendant les opérations Count Tokens , communiquant via un canal.Illustration de son fonctionnement:
séquenchestre
participant principal en tant que goroutine principale
participant G1 comme goroutine 1
participant G2 comme goroutine 2
participant G3 comme goroutine 3
participant ch comme canal d'erreur
Collecteur des participants comme collecteur d'erreurs (connu sous le nom de politique de réessayer)
Main - >> CH: Créez un canal avec la capacité
Main - >> G1: Démarrez Goroutine 1
Main - >> G2: Démarrez Goroutine 2
Main - >> G3: Démarrez Goroutine 3
G1 - >> CH: Envoyer une erreur (le cas échéant)
G2 - >> CH: Envoyer une erreur (le cas échéant)
G3 - >> CH: Envoyer une erreur (le cas échéant)
Main - >> collectionneur: commencez à collecter des erreurs
Erreurs de collecte de boucle
Ch - >> Collecteur: Envoyez des erreurs à Collector
fin
Main - >> Main: Fermer le canal après tout Goroutines terminées
Collecteur - >> Main: Renvoie d'abord l'erreur non-NIL
Améliorez Colorize pour améliorer l'évolutivité et l'intégrez à l'expansion de la bibliothèque standard pour de meilleures performances.
Commanger le modèle en utilisant les commandes
Note
La fonction Plan for Google Cloud Deployment est destinée à prendre en charge la compatibilité cloud avec les capacités Vertex AI une fois que la version V1.0.0 (ce référentiel) est atteinte et considérée comme une lecture stable ici.
Pourquoi? Ce projet est développé conformément aux Terms of Service et à Privacy Policy à personal use . Il est important de noter que ce projet est développé sur une base personnelle pendant mon temps libre et n'est associé à aucune entreprise ou entreprise d'entreprise. Cela contraste avec de nombreuses entreprises qui répondent principalement aux besoins des entreprises. Par exemple, les capacités Vertex AI peuvent être utilisées sur une base personnelle pour des tâches telles que le réglage fin et l'utilisation de vos propres données, sans la complexité et les frais généraux généralement associés aux exigences au niveau de l'entreprise.
Note
La fonction Web Interface Support est conçue pour faciliter la prise en charge de WebAssembly (WASM), en tirant parti de son développement en Go. Cela permet la gestion du chat et d'autres fonctionnalités localement, à partir de la version V1.0.0 + (probablement V2) de ce référentiel, une fois qu'il est atteint et jugé stable. Pour les meilleures pratiques, lisez ici.
Note
Le Calculate the Size of the Code Base Volume est conçu pour évaluer la taille d'une base de code. Par exemple, il peut calculer le volume des projets open source de Google ou d'autres projets open source, qui contiennent des milliards de lignes de code écrites en Go .
Go Code en Mermaid Markdown Note
La fonctionnalité, Convert Each Function in Go Code to Mermaid Markdown , est conçue pour évaluer une base de code. Il est inspiré par le Dead Code . Par exemple, il transformera chaque fonction accessible en format Mermaid Markdown .
Disponible here