OAA2 Distribution history ------------------------- -------------------------------------------------------------- Version 2.2.1 -------------------------------------------------------------- Facilitator ----------- When shutting down, now closes all connections more gracefully. This should help to ensure that the facilitator's listen port gets released more promptly by the operating system. New build works with RedHat 8.0. Fixed the facilitator's backward compatibility module, so that it properly supports the use of agents built using OAA 1 libraries (such as the Perl and Lisp libraries). All libraries: ICL term parsing routines now support the infix use of the following operators: :- ; = : :: + - * / Prolog library -------------- Sicstus-generated executables no longer distributed for Solaris 5.6. Fix to ordering of incoming messages (related to version of samsort function used with Sicstus). Java library ------------ Added the old constructor (from v. 2.1.0) back to IclStruct for backwards compatibility. This constructor takes a Vector as input. Also for backwards compatibility, iclFunctor() once again returns an empty string instead of NULL. Previously, the local solve parameters and actual solve parameters were placed in the solve parameters list passed to the OAAEventListener interface, causing that list to contain two sublists. Now the two sublists are "flattened" into a single list. A new class, ToList, makes it possible to convert an IclTerm object into an IclList object, without having to use an explicit cast. This is a convenience for use with WebL. Improvements to ICL Term interface: Added generic IclTermTraverser abstract class for traversing an IclTerm's children. Added a class to generate a manually constructed IclTerm from a String. Added isAtomic() and isComposite() methods to IclTerm. Changed composite terms to take a List instead of ArrayList in constructor. Changed IclTerm.iterator() and IclTerm.listIterator() to always return a valid iterator. log4j and concurrent (the open-source Java packages) have been "unbundled" from oaa2.jar. That is, it now is built and loaded as a separate jar file. src removed; jar file distributed. antlr (the open-source Java package) has been "unbundled" from oaa2.jar, and renamed to antlr-oaa.jar. The renaming reflects the fact that the OAA source distribution includes modifications to several of the antlr source files. xerces - removed altogether Java Agents ----------- Corrected version number and/or copyright date that are displayed by certain agents, for the Help/About menu command. Fixed the Help command in StartIt. Cleaned up calls to deprecated functions. Updated weather agent script (yahooweather.webl) to accommodate recent HTML changes on the Yahoo site. -------------------------------------------------------------- Version 2.2.0 -------------------------------------------------------------- ---------------------------------- NEW AGENT INCLUDED IN DISTRIBUTION ---------------------------------- Alarm agent: Implements time triggers for all agents connected to the same facilitator. See http://www.ai.sri.com/~oaa/distribution/distribv2/doc/agents/alarm Note: the "Attain" natural language agents, which were included in release 2.1.0, are not included with release 2.2.0. They are still available, however, here: http://www.ai.sri.com/~oaa/contributions/ -------------------- GENERAL IMPROVEMENTS -------------------- Except as noted, the general improvements described below apply to the facilitator and all language libraries (Java, C, Prolog). Application agent code that works with version 2.1.0 should still work with 2.2.0 libraries. In using the Java and C libraries, you may see some deprecation warnings, and it is recommended that the appropriate changes be made. ------------------ New "direct connect" capabilities for oaa_Solve requests To support more efficient exchange of large messages and rapidfire messages between agents, the prolog library now supports a nearly transparent means of enabling direct exchange of messages associated with oaa_Solve requests. That is, oaa_Solve requests and their responses can now be routed directly between the requester and provider, rather than going through the facilitator. At present this is only supported for the case of a single provider. When direct_connect(true) is included in the Params of the requester's call to oaa_Solve, library code contacts the facilitator to determine what providers are available. If there is only one provider, and if that provider is listening on a socket, the requester opens a connection and communicates directly with the provider. If a provider address is already known to the requester, and is specified in the Params list, along with direct_connect(true), the facilitator is not contacted at all. These "peer to peer" connections are kept open so that a series of direct_connect requests to the same provider can be dispatched rapidly. When passing goals that contain large data, the bandwidth employed in contacting the facilitator can be minimized by specifying a "goal template", which contains variables in the positions that would normally contain data. ------------------ More efficient encoding of messages between agents ICL terms can now be encoded in a more compact form when transmitted between agents (across sockets), allowing for quick parsing by the message recipient. In 2.2.0, this form of encoding will only be used when "direct connect" is used between agents implemented using Java and/or C. In future releases, this encoding will be adopted for all communications, including those going through the facilitator. ------------------ Binary data now supported in ICL expressions In the past, ICL, like Prolog, has offered only a single primitive string type, called an "atom". This has been limiting in two respects. First, both Quintus and Sicstus Prolog implementations limit the length of an atom to 64K. Second, in translating to and from languages, such as lisp, which distinguish between symbols and strings, we have not been able to maintain this distinction in ICL expressions. To address these limitations, ICL now includes a double-quoted string type, which has no length limit. In addition to using double quotes, it is also necessary to enclose the string in an 'icldataq' functor, like this: icldataq(".....") (We'd have preferred not to require the functor, but it's unavoidable at present, given the way Prolog works, and the vendor libraries upon which the facilitator depends.) Within the double quotes, any sequence of bytes is allowed, including null characters. (Double quote characters are escaped by doubling them.) ------------------ Optimization of large data messages Additional support for exchange of large data sets is provided by allowing application agent code to write the data directly onto the stream, when a request or response message is transmitted. This is accomplished by using the parameter icl_goal_writer/2 with oaa_Solve (in the requester), and using icl_solution_writer/2 as the return value of the do_event callback procedure (in the provider). This can be used with or without the use of direct_connect. ------------------ New parameter for oaa_Solve: provider_limit(N). This instructs the facilitator to select at most N providers (solvers) to handle the given goal. This is especially useful with direct_connect. ------------------ New library procedures (in all libraries), further minimizing the amount of code needed in agent wrappers: oaa_SetupCommunication oaa_Connect ------------------ Documentation: The Developer's Guide now includes examples in Java and C (as well as Prolog) ------------------------------- IMPROVEMENTS TO THE FACILITATOR ------------------------------- Optimization of incoming message queue code minimizes time spent in maintaining the queue; allows for faster throughput of messages. New command line argument (-output_file filename) telling the facilitator to write all output and error messages to the given file. (Under Unix, this is no different than using ">& filename" on the command line.) New code makes it more meaningful and more robust to call oaa_Solve in the facilitator (for instance, as part of a trigger action, or as part of the body of a "rule"). Consequently, the use of "rules" with data solvables, declared on the facilitator, is now more fully supported. This results in a significant expansion of how the facilitator can be used by other agents, as described here: http://to_be_provided Com library: Several changes made to bulletproof against too many connections coming in. Facilitator now accepts parameter "max_connections". Refinement of on_port_exception options (specification of behavior desired when the facilitator is unable to access a particular port). -------------------------------- IMPROVEMENTS TO THE JAVA LIBRARY -------------------------------- New ICL parsing code, based on the public domain package "antlr". Considerably faster and more robust than earlier versions. Inclusion of 2 open source packages: antlr (See www.antlr.org/) log4j (See http://jakarta.apache.org/log4j/) More efficient management of incoming messages and outgoing messages, resulting in considerable improvements in speed and memory requirements. Bug fix. This bug caused deadlock when an agent waited on several synchronous responses, and the responses came back in the "wrong" order. A wide variety of minor bug fixes and optimizations. ----------------------------- IMPROVEMENTS TO THE C LIBRARY ----------------------------- New ICL parsing code, based on the public domain package "pccts". Considerably faster and more robust than earlier versions. Bug fix. Under Linux, a setup file line longer than 512 bytes could cause a segmentation fault. The possibility of seg fault has been eliminated. However, note that under this fix, setup file lines longer than 1024 will be ignored. Bug fix. This bug caused deadlock when an agent waited on several synchronous responses, and the responses came back in the "wrong" order. Various memory leaks and memory corruption bugs corrected. Improved portability. A wide variety of minor bug fixes and optimizations. Documentation: New source code documentation, generated by Doxygen. ---------------------------------- IMPROVEMENTS TO THE PROLOG LIBRARY ---------------------------------- New functionality in com module: on_connect_exception options. A variety of behaviors can now be specified for situations in which an agent attempts to connect to a facilitator, and the connection can't be opened. New library procedure (for convenience): 2 argument version of oaa_Declare Minor reorganization of library files. Various minor bug fixes. -------------------------------------------------------------- Version 2.1.0 : September 2001 -------------------------------------------------------------- NEW AGENTS (oaa_shell, eliza, attain): OAA_SHELL: A utility and debugging tool for sending requests and queries to a facilitator, from the (Unix or DOS) command line. See http://www.ai.sri.com/~oaa/sri-private/distribv2/doc/agents/oaa_shell ELIZA: an OAA-wrapped version of Viren Patel's Prolog implementation of the classic AI program, which simulates the conversational capabilities of a psychotherapist. See http://www.ai.sri.com/~oaa/sri-private/distribv2/doc/agents/eliza ATTAIN: a set of Natural Language Understanding agents, based on SRI's Gemini system. Note: source code is not provided; just binaries. For this release, binaries are only provided for Sun/Solaris. ATTAIN is a package of natural language OAA agents which provides translation of English sentences into ICL messages that other agents can use. Thus, this package plays a similar role to that of the DCG-NL agent, but uses SRI's industrial strength Gemini parser. ATTAIN produces a more expressive ICL representation than that produced by DCG-NL, and brings several other advantages as well. For example, one practical advantage of ATTAIN is that the inflected forms of regular nouns and verbs (e.g. singular/plural, past tense), come for free with Gemini, whereas they have to be entered manually in the DCG nl agent. See http://www.ai.sri.com/~oaa/sri-private/distribv2/doc/agents/attain Note: none of these new agents is included in the StartIt config file; they are to be invoked from the command line, as described on their documentation pages. Also, the new natural language agent (ATTAIN) is not set up for use with the demo information agents (weather and employee DB). In future releases, we hope to have these new agents integrated more fully into the distribution. -------------------- Improvements to the prolog library : Refined and extended the way in which data callbacks (callbacks with ID app_on_data_change) and data triggers are tested for firing. In particular, data callbacks are now provided for solvables with and without bookkeeping (previously only with). In cases where multiple data elements are removed by one command, data triggers are now fired individually for every element removed or replaced. Increased flexibility in dealing with port availability. When a client agent isn't able to connect to a specified port, a number of options are provided (for example, continue trying every X seconds; try the next highest port). These options can be specified interactively, or in the setup file. These options are consistent with existing options for the facilitator. It's no longer necessary to specify parent_dialect on the commandline of prolog agents (see release notes for 2.0.10). (Sictus only) Added several missing predicates (in spcompat.pl); such as subtract/3 and intersect/2 and intersection/3. More selective in sending ev_agent_disconnected notification to other agents, when an agent disconnects. Now the notification is only sent if there's reason to believe the other agents need to know. COMM trace messages are more informative: They now include the agent's name, not just its address. Data synchronization (when an agent declares a data solvable, all existing facts for that solvable are downloaded from the facilitator when the agent starts up) is now optional, and can be specified using synchronize(true|false) in the parameter list for the data solvable. The default is false. More restrictive about propagating context params - only if reply(true). ------------------ Improvements to the facilitator: Now warns, but doesn't exit, when the specified host isn't the same as the execution machine. More careful attention to number of connections. A new parameter, max_connections, can be used to limit how many connections are accepted at any one time. This parameter can be set using the facilitator's commandline, environment variable, or set up file. The default value is 58, so as to avoid an infinite loop that comes up in Quintus under Solaris. Better exception handling (in Quintus) for the situation where too many connections are open. Minor improvement to the backwards compatibility module, so that OAA1 agents "turn green" in the StartIt GUI, and "can_solve" requests from OAA1 agents work properly. Also, corrected a problem with backwards translation of params in ev_solve events. ------------------ Improvements to the Java library : Bug fix: IclAppend now appends to the end of the list, rather than the beginning. Significant optimizations for speed. Callback id's now conform to those used in the Prolog library (app_do_event, app_idle, etc.) Backwards compatility is provided for the old id's (oaa_AppDoEvent, etc.) ------------------ Improvements to the C library : Callback id's now conform to those used in the Prolog library (app_do_event, app_idle, etc.) Backwards compatility is provided for the old id's (oaa_AppDoEvent, etc.) A variety of optimizations, bug fixes, and robusticizing of the code. This includes a number of code changes contributed by Pete Tinker, and described on the oaa-users mailing list. ------------------- Improvements to the DCG-NL agent : Bug fix: downloading vocabulary from the facilitator at startup, and checking the facilitatorfor additional vocabulary as needed (neither was working properly before the fix). Improvements to the monitor agent : Bug fix: Required semicolon is now inserted between preline and appline. Improvements to startit : Now works under Windows 2000 (code fix contributed by Matt Ginzton). ----------------------------------------------------------------- Version 2.0.12 : August 2, 2000 ----------------------------------------------------------------- Improvements to the facilitator and Prolog library : Bug fix: Prolog agents, including the facilitator, are currently unable to declare data solvables that overload compiled predicates. Previously, an attempt to do so would lead to an unhandled exception, and no warning message. Now, although the restriction still holds, the exception is handled and a warning message is printed. Improvements to the employee database (which impact natural language recognition) : Last or first name only, in addition to both names together, can now be used in queries. Proper translation of the word "phone" in a query. Improvements to the C library : Bug fix: Serious memory leak corrected. (This affected the C debug agent, as well as any new agents using the C library.) Version 2.0.11 : July 20 2000 ----------------------------- Improvements to the facilitator and Prolog library : We now include Sicstus-generated runtimes for the facilitator and natural language agents, both for Solaris and for Linux running on Intel x86 hardware. See README_PROLOG for notes about using Sicstus. Bug fix: oaa_priority_compare made equivalent in Quintus and Sicstus code. Previously, they differed so as to cause different orderings of incoming events. Various other minor bug fixes, mostly around communication primitives, Sicstus compatibility, and backwards compatibility. Improvements to the C and Java libraries : ICL parsing routines now handle the semicolon (:) and vertical bar (|) operators. Various optimizations for speed (Java library). Version 2.0.10 : July 19 2000 ----------------------------- Improvements to the facilitator and Prolog library : Initial version of sicstus compatibility code. This code should be considered a beta version. Sicstus users: please report any bugs or difficulties to oaa-staff@ai.sri.com. Note that we are NOT distributing any Sicstus-generated runtimes with this release; just updated Prolog source files that can be used in a Sicstus environment. In the next release, we plan to distribute Sicstus-generated runtimes for the facilitator and the DCG_NL agent, at least for Linux. (These will be our first distributed Linux runtimes.) Note that it is possible to have an application that uses a mix of Quintus and Sicstus agents. There is one caveat, though: when a Sicstus client agent connects to a Quintus facilitator, the command line argument -parent_dialect quintus should be passed to the Sicstus agent. Similarly, when a Quintus client agent connects to a Sicstus facilitator, this command line argument should be given to the Quintus agent: -parent_dialect sicstus Improvements to the C and Java libraries : ICL parsing routines now handle the colon (:) operator. Minor change to all libraries : Parameter block/1 (to oaa_Solve and other library functions) is now blocking/1. This was done because of Sicstus' use of block as a keyword. However, block/1, in older applications, will still work properly. Version 2.0.9 : May 25 2000 ----------------------------- Bug fixes : - Large messages correctly handled (C and Java were bogus) - Facilitator data solvable is no longer declared when agent A calls oaa_AddData for a solvable that A (only) declares - dcg_nl agent: Format translation is now done for all vocabulary items Improvements to the facilitator : - When parallel_ok(false), and multiple agents provide a requested service, a simple form of load balancing is used: the agents with the fewest outstanding requests are used first. Improvements to the libraries : - Command line option -oaa_name recognized by all libraries - Command line option -init_file recognized by the Prolog library - Prolog library now provides database save and load from file Version 2.0.8 : April 22 2000 ----------------------------- Release of the C library Version 2.0.7 : December 21, 1999 --------------------------------- Fixed the java library : Adding triggers locally fixed. book-keeping and ownership of data fixed. added iclReplaceNthTerm in iclContainers. fixed minor bugs in String management Improvements to the facilitator : When the requested port isn't available, gives a variety of options, which can be specified either interactively or in the setup file New commandline options: -usage -write_setup_file FilePath -write_connections_file FilePath Version 2.0.6 : ---------------------------- Fixed the java library : iclRemoveFromList is now based on unification. oaaInterpret returns false when the term to interpret is not a builtIn nor a user defined solvable fixed oaa_update_data and oaa_add_data_local temporarily removed oaa_id_ref management for the local agent database (turned bookkeeping off by default) implemented : oaa_replace_data_local(liboaa.jave) and db_Replace(icldb.java) removed the warning when attempting to call a non-registered callback. (It tends to confuse users) Fixed monitor : when killing an agent using the right-click button, does not generate null pointer exception anymore Version 2.0.5 : Dec 10, 1999 ---------------------------- Thanks to Jehan's comments : com/sri/oaa2/lib/LibOaa.java 4753: ';;' to be removed 4760: idem com/sri/oaa2/agt/startit/AgentButton.java class AgentSelects should be moved into its own file. Same for class AgentSelectsDetails LibOaa 230: remove prenthesis (#LibOaa) 270: "com." before "sri.oaa2.com" is missing 271: idem debugAgent.frmMain 140: no parenthesis and a pound sign (com.sri.oaa2.lib.LibOaa#oaaRegisterCallback) OaaAboutDialog 68: no package "oaa.tools" 69: idem Version 2.0.4 : Dec 5, 1999 --------------------------- DOC: Added the history.txt file JAVA : Fixed bugs in StartIt and added the Command option when running under Windows PROLOG: Put the latest faciliator Version 2.0.3 : November 15, 1999 --------------------------------- First initial distribution